2024-06-10.md

๐Ÿก

DIL: ์ดํŽ™ํ‹ฐ๋ธŒ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ

์Šคํ„ฐ๋””: ์›”๊ฐ„ CS, https://github.com/monthly-cs/2024-05-effective-typescript
์ž‘์„ฑ์ผ: 2024-06-10
์ž‘์„ฑ์ž: dusunax


ํƒ€์ž… ์„ ์–ธ๊ณผ @type

  • ์˜์กด์„ฑ ๊ด€๋ฆฌ๋Š” ์–ด๋ ต๋‹ค.
  • ํƒ€์ž… ์„ ์–ธ๋ฌธ => ํ”„๋กœ์ ํŠธ + TS ์ปค๋ฎค๋‹ˆํ‹ฐ ๊ธฐ์—ฌ

์•„์ดํ…œ 45: devDependencies์— typescript์™€ @types ์ถ”๊ฐ€ํ•˜๊ธฐ Put TypeScript and @types in devDependencies

  • npm, node package manager๋Š” JS ์ƒํƒœ๊ณ„์—์„œ ํ•„์ˆ˜์ 
  • package.json: ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜์กดํ•˜๊ณ  ์žˆ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „์„ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ•

์˜์กด์„ฑ ์ข…๋ฅ˜

  • dependencies
    • ์ „์ด ์˜์กด์„ฑ transitive dependencies
    • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜ํ•œ๋‹ค๋ฉด ํ•จ๊ป˜ ์„ค์น˜๋œ๋‹ค
  • devDependencies:
    • ๋Ÿฐํƒ€์ž„์—๋Š” ํ•„์š”์—†๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ํ”„๋กœ์ ํŠธ๋ฅผ ์„ค์น˜ํ•˜๋ฉด devDependencies๋Š” ์ œ์™ธ๋œ๋‹ค.
    • ex) ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ
  • peerDependencies:
    • ๋Ÿฐํƒ€์ž„์— ํ•„์š”ํ•˜์ง€๋งŒ, ์˜์กด์„ฑ์„ ์ง์ ‘ ๊ด€๋ฆฌํ•˜์ง€ ์•Š๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ex) ํ”Œ๋Ÿฌ๊ทธ์ธ

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ์˜์กด์„ฑ

  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ์ผ ๋ฟ์ด๊ณ , ํƒ€์ž… ์ •๋ณด๋Š” ๋Ÿฐํƒ€์ž„์— ์†ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž… ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ devDependencies์— ์†ํ•œ๋‹ค

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ž์ฒด ์˜์กด์„ฑ

  • TS๋ฅผ ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ๋กœ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์ถ”์ฒœํ•˜์ง€ ์•Š๋Š” ์ด์œ 
    • ํŒ€์›์ด ๋™์ผํ•œ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์Œ
    • ํ”„๋กœ์ ํŠธ ์…‹์—…์— ๋ณ„๋„์— ๋‹จ๊ณ„๊ฐ€ ์ถ”๊ฐ€๋จ
  • global ์„ค์น˜ x => devDependencies์— ๋„ฃ์ž
  • npx๋กœ devDependencies์˜ ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Œ npx tsc

ํƒ€์ž… ์˜์กด์„ฑ @types

  • DefinitelyTyped์—์„œ ํƒ€์ž… ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
  • npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์˜ @types์Šค์ฝ”ํ”„์— ๊ณต๊ฐœ๋œ๋‹ค.
    • ex) @types/jquery, @types/lodash
    • ํƒ€์ž… ์ •๋ณด๋งŒ ํฌํ•จํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ๊ตฌํ˜„์ œ๋Š” ํฌํ•จํ•˜์ง€ ์•Š์Œ
  • ํƒ€์ž… ์˜์กด์„ฑ์€ devDependencies์— ์žˆ์–ด์•ผ ํ•œ๋‹ค.

Things to Remember

  • Understand the difference between dependencies and devDependencies in package.json.
    • dependencies & devDependencies ์ฐจ์ด์  ์•Œ๊ธฐ
  • Put TypeScript in your project's devDependencies. Don't install TypeScript system-wide.
    • ์‹œ์Šคํ…œ ๋ ˆ๋ฒจ๋กœ ์„ค์น˜ํ•˜์ง€ ๋ง๊ณ  ํ”„๋กœ์ ํŠธ ๋‹จ์œ„๋กœ ์„ค์น˜ํ•˜๊ธฐ (devDependencies)
  • Put @types dependencies in devDependencies, not dependencies.
    • devDependencies์— ํƒ€์ž… ์˜์กด์„ฑ @types ์„ค์น˜ํ•˜๊ธฐ

์•„์ดํ…œ 46: ํƒ€์ž… ์„ ์–ธ๊ณผ ๊ด€๋ จ๋œ ์„ธ ๊ฐ€์ง€ ๋ฒ„์ „ ์ดํ•ดํ•˜๊ธฐ Understand the Three Versions Involved in Type Declarations

ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์™€ ๋ฒ„์ „

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ฒ„์ „
  • ํƒ€์ž… ์„ ์–ธ์˜ ๋ฒ„์ „ @types
  • ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๋ฒ„์ „

์„ค์น˜ํ•˜๊ธฐ

  • ํŠน์ • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ dependencies๋กœ ์„ค์น˜
  • ํƒ€์ž… ์ •๋ณด๋ฅผ devDependencies๋กœ ์„ค์น˜
$ npm install react
+ react@16.8.6

$ npm install --save-dev @types/react
+ @types/react@16.8.19
// ํƒ€์ž… ์„ ์–ธ์ด 16.8.x์˜ API๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
// ๋ฉ”์ด์ €์™€ ๋งˆ์ด๋„ˆ๊ฐ€ ์ผ์น˜ํ•˜์ง€๋งŒ, ํŒจ์น˜๋ฒ„์ „์€ ์ผ์น˜ํ•˜์ง€ ์•Š๋Š”๋‹ค!

// ์‹œ๋ฉ˜ํ‹ฑ ๋ฒ„์ €๋‹์— ๋”ฐ๋ผ ํŒจ์น˜ ๋ฒ„์ „์€ ๊ณต๊ฐœ API์˜ ์‚ฌ์–‘์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ
// ์ฆ‰, @types์˜ ํŒจ์น˜ ๋ฒ„์ „์€ ํƒ€์ž… ์„ ์–ธ ์ž์ฐจ์˜ ๋ฒ„๊ทธ/๋ˆ„๋ฝ ์‚ฌํ•ญ ์ˆ˜์ •์œผ๋กœ ์ธํ•œ ์—…๋ฐ์ดํŠธ

ํƒ€์ž… ์ •๋ณด๊ฐ€ ๋ณ„๋„๋กœ ๊ด€๋ฆฌ๋  ๋•Œ์˜ ๋ฌธ์ œ์ 

A. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ , ํƒ€์ž… ์„ ์–ธ์„ ์—…๋ฐ์ดํŠธ ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ

  • ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์‚ฌ์šฉ ์‹œ, ํƒ€์ž… ์˜ค๋ฅ˜
  • ํ•˜์œ„ ํ˜ธํ™˜์„ฑ์ด ๊นจ์ง€๋Š” ์—…๋ฐ์ดํŠธ๊ฐ€ ์žˆ์—ˆ์„ ์‹œ, ๋Ÿฐํƒ€์ž„ ์˜ค๋ฅ˜
  • ํƒ€์ž… ์„ ์–ธ ๋ฒ„์ „์ด ์ค€๋น„๋˜์ง€ ์•Š์•˜๋‹ค๋ฉด? ๋ณด๊ฐ•์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœ์ ํŠธ ์ž์ฒด์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜, ํƒ€์ž… ์„ ์–ธ์„ ์ง์ ‘ ์ž‘์„ฑํ•˜์—ฌ ๊ธฐ์—ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

B. ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ณด๋‹ค ํƒ€์ž… ์„ ์–ธ์ด ์ตœ์‹ ์ธ ๊ฒฝ์šฐ

  • ํƒ€์ž… ์ •๋ณด ์—†์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค๊ฐ€, ํƒ€์ž… ์„ ์–ธ์„ ์„ค์น˜ํ•˜๋ ค ํ•  ๋•Œ ๋ฐœ์ƒ
  • ํƒ€์ž… ์ฒด์ปค๋Š” ์ตœ์‹  API๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ฝ”๋“œ๋ฅผ ๊ฒ€์‚ฌํ•˜์ง€๋งŒ, ๋Ÿฐํƒ€์ž„์— ์“ฐ์ด๋Š” ๊ฒƒ์ด ๊ณผ๊ฑฐ ๋ฒ„์ „
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ฒ„์ „๊ณผ ๋งž๋„๋ก ํƒ€์ž… ์„ ์–ธ์˜ ๋ฒ„์ „์„ ๋‚ด๋ฆฐ๋‹ค

C. ํ”„๋กœ์ ํŠธ์—์„œ ์‚ฌ์šฉํ•˜๋Š” TS๋ณด๋‹ค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ํ•„์š”๋กœํ•˜๋Š” TS ๋ฒ„์ „์ด ๋†’์„ ๋•Œ

  • ์œ ๋ช… JS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฒฝ์šฐ, ํƒ€์ž… ์ •๋ณด๋ฅผ ์ •ํ™•ํžˆ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ํƒ€์ž… ์‹œ์Šคํ…œ์ด ๊ฐœ์„ ๋˜๊ณ  ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐ€๋Š” ๊ฒฝํ–ฅ
    • ์ด๋Ÿฐ ๊ฒฝ์šฐ ์ตœ์‹  ํƒ€์ž… ์ •๋ณด๋ฅผ ์œ„ํ•ด ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ์˜ ๋ฒ„์ „์„ ์˜ฌ๋ฆฌ๊ฑฐ๋‚˜, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํƒ€์ž… ์„ ์–ธ์˜ ๋ฒ„์ „์„ ๋‚ด๋ฆฌ๊ฑฐ๋‚˜, declare module๋กœ ํƒ€์ž… ์ •๋ณด๋ฅผ ์—†์•ค๋‹ค.
  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ typesVersions(ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „๋ณ„๋กœ ๋‹ค๋ฅธ ํƒ€์ž… ์„ ์–ธ)๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ๋„ ์žˆ์ง€๋งŒ 1% ๋ฐ–์— ์•ˆ๋จ
  • ํŠน์ • ๋ฒ„์ „์˜ ํƒ€์ž… ์ •๋ณด ์„ค์น˜ํ•˜๊ธฐ
    npm install --save-dev @types/lodash@ts3.1
    

D. @type ์ค‘๋ณต

  • @type/foo์™€ @type/bar
    • ๋งŒ์•ฝ @type/bar๊ฐ€ ํ˜„์žฌ ํ”„๋กœ์ ํŠธ์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š๋Š” ๋ฒ„์ „์˜ @type/foo์— ์˜์กดํ•œ๋‹ค๋ฉด npm์€ ์ค‘์ฒฉ ํด๋”์— ๋ณ„๋„์˜ ๋ฒ„์ „์„ ์„ค์น˜ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ ค ํ•œ๋‹ค.
    • ์ „์—ญ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ง„ ํƒ€์ž… ์„ ์–ธ ๋ชจ๋“ˆ์ด๋ผ๋ฉด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. => ์ข…๋ณต๋œ ์„ ์–ธ, ์„ ์–ธ ๋ณ‘ํ•ฉ์œผ๋กœ ์˜ค๋ฅ˜
    • npm ls @type/foo๋ฅผ ์‹คํ–‰ํ•˜์—ฌ ํƒ€์ž… ์„ ์–ธ ์ค‘๋ณต์„ ์ถ”์ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•ด๊ฒฐ๋ฒ•
    • @type/foo๋˜๋Š” @type/bar๋ฅผ ์—…๋ฐ์ดํŠธํ•˜์—ฌ ์„œ๋กœ ๋ฒ„์ „์ด ํ˜ธํ™˜๋˜๋กœ๊ณ  ํ•จ

๋ฒˆ๋“ค๋งํ•˜์—ฌ ํƒ€์ž… ์„ ์–ธ์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ์˜ ๋ฌธ์ œ์ 

  • TS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์„ ์ž์ฒด์ ์œผ๋กœ ํƒ€์ž… ์„ ์–ธ์„ ํฌํ•จ(๋ฒˆ๋“ค๋ง)ํ•œ๋‹ค.
    • ์ž์ฒด์  ํƒ€์ž… ์„ ์–ธ์€ ๋ณดํ†ต types ํ•„๋“œ์˜ ~.d.ts๋ฅผ ๊ฐ€๋ฆฌํ‚จ๋‹ค

A. ๋ฒˆ๋“ค๋œ ํƒ€์ž… ์„ ์–ธ์— ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ

  • ๋ณด๊ฐ•์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๋•Œ & ๊ณต๊ฐœ ์‹œ์ ์—๋Š” ๋™์ž‘ํ–ˆ์ง€๋งŒ, TS ๋ฒ„์ „์ด ์˜ฌ๋ผ๊ฐ€๋ฉด์„œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ์šฐ
  • @types๋ฅผ ๋ณ„๋„๋กœ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๋ฒ„์ „์„ ๋งž์ถœ ์ˆ˜ ์žˆ์ง€๋งŒ, ๋ฒˆ๋“ค๋œ ํƒ€์ž…์ด๋ผ๋ฉด ์„ ํƒ์ด ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

B. ํ”„๋กœ์ ํŠธ ๋‚ด์˜ ํƒ€์ž… ์„ ์–ธ์ด, ๋‹ค๋ฅธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ํƒ€์ž… ์„ ์–ธ์— ์˜์กดํ•  ๋•Œ

  • ๋ณดํ†ต ์˜์กด์„ฑ์€ devDependencies
    • ํ”„๋กœ์ ํŠธ๋ฅผ ๊ณต๊ฐœํ•˜์—ฌ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๊ฐ€ ์„ค์น˜ํ•˜๋ฉด devDependencies๊ฐ€ ์„ค์น˜๋˜์ง€ ์•Š์•„ ํƒ€์ž… ์˜ค๋ฅ˜
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ์ž๋Š” ํƒ€์ž… ์ •๋ณด๋ฅผ ์„ค์น˜ํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค. ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์‚ฌ์šฉ์ž๋งŒ์ด ํƒ€์ž… ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

C. ํ”„๋กœ์ ํŠธ ๊ณผ๊ฑฐ ๋ฒ„์ „์˜ ํƒ€์ž… ์„ ์–ธ์— ๋ฌธ์ œ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ, ํŒจ์น˜ ์—…๋ฐ์ดํŠธ

  • ๋ฒˆ๋“ค๋ง๋œ ํƒ€์ž… ์„ ์–ธ์—์„œ๋Š” ์–ด๋ ต์ง€๋งŒ @types์€ ๋™์ผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์—ฌ๋Ÿฌ ๋ฒ„์ „์—์„œ ํƒ€์ž… ์„ ์–ธ์„ ๋™์‹œ์— ์œ ์ง€๋ณด์ˆ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์ด ์žˆ๋‹ค.

D. ํƒ€์ž… ์„ ์–ธ์˜ ํŒจ์น˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์ž์ฃผ ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

  • DefinitelyTyped๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ์—์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํŒจ์น˜๋ฅผ ์ ์šฉํ•  ๋‹ด๋‹น์ž ์žˆ์Œ

์˜์กด์„ฑ ๊ด€๋ฆฌ

  • ์ž˜ ์ž‘์„ฑ๋œ ํƒ€์ž… ์„ ์–ธ์€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ฐฐ์šฐ๋Š” ๋ฐ ๋„์›€์ด ๋˜๊ณ  + ์ƒ์‚ฐ์„ฑ์ด ํฌ๊ฒŒ ํ–ฅ์ƒ๋œ๋‹ค.

  • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ณต๊ฐœํ•˜๋Š” ๊ฒฝ์šฐ, ํƒ€์ž… ์„ ์–ธ์„ ์ž์ฒด์ ์œผ๋กœ ํฌํ•จํ•˜๋Š” ๊ฒƒ๊ณผ DefinitelyTyped์— ๊ณต๊ฐœํ•˜๋Š” ๊ฒƒ์˜ ์žฅ๋‹จ์ ์„ ๋น„๊ตํ•˜๊ธฐ

  • ๊ณต์‹ ๊ถŒ์žฅ์‚ฌํ•ญ

    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ TS๋กœ ์ž‘์„ฑ๋œ ๊ฒฝ์šฐ์—๋งŒ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จํ•˜๊ธฐ

      • TS๋กœ ์ž‘์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž… ์„ ์–ธ์„ ๋Œ€์‹ ํ•ด์ค€๋‹ค
      • JS๋กœ ์ž‘์„ฑํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ: ์ง์ ‘ ์ž‘์„ฑํ•œ ํƒ€์ž… ์„ ์–ธ์€ ์˜ค๋ฅ˜๊ฐ€ ์žˆ์„ ๊ฐ€๋Šฅ์„ฑ์ด ๋†’๊ณ , ์—…๋ฐ์ดํŠธ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. DefinitelyTyped์— ๊ณต๊ฐœํ•ด์„œ ๊ด€๋ฆฌํ•˜๋„๋ก ๋งก๊ธฐ๋Š” ๊ฒƒ์ด ์ข‹์Œ

Things to Remember

  • There are three versions involved in an @types dependency: the library version, the @types version, and the TypeScript version.
    • ์˜์กด์„ฑ ์„ธ ๊ฐ€์ง€ ๋ฒ„์ „
      • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, @types, ํƒ€์ž…์Šคํฌ๋ฆฝํŠธ ๋ฒ„์ „
  • Recognize the symptoms of different types of version mismatch.
  • If you update a library, make sure you update the corresponding @types.
    • ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒฝ์šฐ, @types๋„ ์—…๋ฐ์ดํŠธ
  • Understand the pros and cons of bundling types versus publishing them on DefinitelyTyped. Prefer bundling types if your library is written in TypeScript, and DefinitelyTyped if it is not.
    • ํƒ€์ž… ์„ ์–ธ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ํฌํ•จ์‹œํ‚ค๊ธฐ vs DefinitelyTyped์— ๊ณต๊ฐœํ•˜๊ธฐ