# ๐ Item44 ~ 48
# Item44. ํ์ ์ปค๋ฒ๋ฆฌ์ง๋ฅผ ์ถ์ ํ์ฌ ํ์ ์์ ์ฑ ์ ์งํ๊ธฐ
npm
์type-coverage
ํจํค์ง๋ฅผ ํ์ฉํ์ฌany
๋ฅผ ์ถ์ ํ ์ ์๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์๋ค.
$ npx type-coverage
9985 / 10117 98.69%
- ์์ ๊ฐ์ ๊ฒฐ๊ณผ๋ ํด๋น ํ๋ก์ ํธ์ 10,117๊ฐ ์ฌ๋ฒ ์ค 9,985๊ฐ(98.69%)๊ฐ
any
๊ฐ ์๋๊ฑฐ๋any
์ ๋ณ์นญ์ด ์๋ ํ์ ์ ๊ฐ์ง๊ณ ์์์ ์ ์ ์๋ค.
$ npx type-coverage --detail
path/to/code.ts:1:10 getColumnInfo
path/to/module.ts:7:1 pt2
- ์์ ๊ฐ์ด
--detail
ํ๋๊ทธ๋ฅผ ๋ถ์ด๋ฉด,any
ํ์ ์ด ์๋ ๊ณณ์ ๋ชจ๋ ์ถ๋ ฅํด์ค๋ค.- ์ด๋ฅผ ํตํด ๋ฏธ์ฒ ๋ฐ๊ฒฌํ์ง ๋ชปํ
any
์ ๊ทผ์์ง๋ฅผ ์ฐพ์ ์๋ ์๋ค.
- ์ด๋ฅผ ํตํด ๋ฏธ์ฒ ๋ฐ๊ฒฌํ์ง ๋ชปํ
- ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ถํฐ ๋น๋กฏ๋๋
any
ํ์ ์ ๋ช ๊ฐ์ง ํํ๋ก ๋ฑ์ฅํ ์ ์์ง๋ง ๊ฐ์ฅ ๊ทน๋จ์ ์ธ ์๋ ์ ์ฒด ๋ชจ๋์ดany
ํ์ ์ ๋ถ์ฌํ๋ ๊ฒ์ด๋ค.
declare module 'my-module';
- ์์ ๊ฐ์ ์ ์ธ์ผ๋ก
my-module
์์ ์ด๋ค ๊ฒ์ด๋ ์ค๋ฅ ์์ด import ํ ์ ์๋ค.- importํ ๋ชจ๋ ์ฌ๋ฒ์
any
ํ์ ์ด๊ณ , importํ ๊ฐ์ด ์ฌ์ฉ๋๋ ๊ณณ๋ง๋คany
ํ์ ์ ์์ฐํ๊ฒ ๋๋ค.
- importํ ๋ชจ๋ ์ฌ๋ฒ์
import { someMethod, someSymbol } from 'my-module'; // ์ ์
const pt1 = {
x: 1,
y: 2,
}; // ํ์
์ด {x: number, y: number}
const pt2 = someMethod(pt1, someSymbol); // ์ ์, pt2์ ํ์
์ด any
- ์๋ํํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก๋ถํฐ ๋น๋กฏ๋๋
any
์ ๋ ๋ค๋ฅธ ํํ๋ ํ์ ์ ๋ฒ๊ทธ๊ฐ ์๋ ๊ฒฝ์ฐ์ด๋ค.- ์ ์ธ๋ ํ์
๊ณผ ์ค์ ๋ฐํ๋ ํ์
์ด ๋ง์ง ์๋๋ค๋ฉด ์ด์ฉ ์ ์์ด
any
๋จ์ธ๋ฌธ์ ์ฌ์ฉํด์ผ ํ๋ค. - ๊ทธ๋ฌ๋ ๋์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์
๋ฐ์ดํธ๋์ด ํจ์์ ์ ์ธ๋ฌธ์ด ์ ๋๋ก ์์ ๋๋ค๋ฉด
any
๋ฅผ ์ ๊ฑฐํด์ผ ํ๋ค.
- ์ ์ธ๋ ํ์
๊ณผ ์ค์ ๋ฐํ๋ ํ์
์ด ๋ง์ง ์๋๋ค๋ฉด ์ด์ฉ ์ ์์ด
# ๐ ์ ๋ฆฌ
noImplicityAny
๊ฐ ์ค์ ๋์ด ์์ด๋, ๋ช ์์ any
๋๋ ์๋ํํฐ ํ์ ์ ์ธ(@types
)์ ํตํดany
ํ์ ์ ์ฝ๋ ๋ด์ ์ฌ์ ํ ์กด์ฌํ ์ ์๋ค๋ ์ ์ ์ฃผ์ํด์ผ ํ๋ค.- ์์ฑํ ํ๋ก๊ทธ๋จ์ ํ์
์ด ์ผ๋ง๋ ์ ์ ์ธ๋์๋์ง ์ถ์ ํด์ผ ํ๋ค. ์ถ์ ํจ์ผ๋ก์จ
any
์ ์ฌ์ฉ์ ์ค์ฌ ๋๊ฐ ์ ์๊ณ ํ์ ์์ ์ฑ์ ๊พธ์คํ ๋์ผ ์ ์๋ค.
# Item45. devDependencies
์ typescript
์ @types
์ถ๊ฐํ๊ธฐ
# (1) npm
์ ์ธ ๊ฐ์ง ์ข
๋ฅ์ ์์กด์ฑ
dependencies
- ํ์ฌ ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ๋ฐ ํ์์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ
- ํ๋ก์ ํธ์ ๋ฐํ์์
lodash
๊ฐ ์ฌ์ฉ๋๋ค๋ฉด ์ฌ๊ธฐ์ ํฌํจ๋์ด์ผ ํจ - ํ๋ก์ ํธ๋ฅผ
npm
์ ๊ณต๊ฐํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ํด๋น ํ๋ก์ ํธ๋ฅผ ์ค์นํ๋ค๋ฉด,dependencies
์ ๋ค์ด ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํจ๊ป ์ค์น๋ ๊ฒ์ด๋ค. - ์ด๋ฌํ ํ์์ ์ ์ด(transitive) ์์กด์ฑ์ด๋ผ๊ณ ํ๋ค.
devDependencies
- ํ์ฌ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ํ
์คํธํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ๋ฐํ์์๋ ํ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ
- ์๋ฅผ ๋ค์ด, ํ๋ก์ ํธ์์ ์ฌ์ฉ ์ค์ธ ํ ์คํธ ํ๋ ์์ํฌ๊ฐ ์ฌ๊ธฐ์ ํฌํจ๋๋ค.
- ํ๋ก์ ํธ๋ฅผ
npm
์ ๊ณต๊ฐํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ํด๋น ํ๋ก์ ํธ๋ฅผ ์ค์นํ๋ค๋ฉด,devDependencies
์ ํฌํจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ ์ธ๋๋ค.
- ํ์ฌ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ํ
์คํธํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ๋ฐํ์์๋ ํ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ
peerDependencies
- ๋ฐํ์์ ํ์ํ๊ธด ํ์ง๋ง, ์์กด์ฑ์ ์ง์ ๊ด๋ฆฌํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ
- ๋จ์ ์ธ ์๋ก ํ๋ฌ๊ทธ์ธ์ ๋ค ์ ์๋ค.
- jQuery์ ํ๋ฌ๊ทธ์ธ์ ๋ค์ํ ๋ฒ์ ์ jQuery์ ํธํ๋๋ฏ๋ก jQuery์ ๋ฒ์ ์ ํ๋ฌ๊ทธ์ธ์์ ์ง์ ์ ํํ์ง ์๊ณ , ํ๋ฌ๊ทธ์ธ์ด ์ฌ์ฉ๋๋ ์ค์ ํ๋ก์ ํธ์์ ์ ํํ๋๋ก ๋ง๋ค ๋ ์ฌ์ฉํ๋ค
- ๋ฐํ์์ ํ์ํ๊ธด ํ์ง๋ง, ์์กด์ฑ์ ์ง์ ๊ด๋ฆฌํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ
# (2) typescript ํ๊ฒฝ์์ npm
์์กด์ฑ ๊ด๋ฆฌ
๐ ํ์ ์คํฌ๋ฆฝํธ ์์ฒด ์์กด์ฑ ๊ณ ๋ ค
- ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์์คํ
๋ ๋ฒจ๋ก ์ค์นํ ์๋ ์์ง๋ง, ๋ค์ ๋ ๊ฐ์ง ์ด์ ๋๋ฌธ์ ์ถ์ฒํ์ง ์๋๋ค.
- ํ์๋ค ๋ชจ๋๊ฐ ํญ์ ๋์ผํ ๋ฒ์ ์ ์ค์นํ๋ค๋ ๋ณด์ฅ์ด ์๋ค.
- ํ๋ก์ ํธ๋ฅผ ์ ์ ํ ๋ ๋ณ๋์ ๋จ๊ณ๊ฐ ์ถ๊ฐ๋๋ค.
- ๋ฐ๋ผ์ ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์์คํ
๋ ๋ฒจ๋ก ์ค์นํ๊ธฐ๋ณด๋ค๋
devDependencies
์ ๋ฃ๋ ๊ฒ์ด ์ข๋ค. - ์ฌ๊ธฐ์ ํฌํจ๋๋ค๋ฉด
npm install
์ ์คํํ ๋ ํ์๋ค ๋ชจ๋ ํญ์ ์ ํํ ๋ฒ์ ์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ค์นํ ์ ์๋ค.
๐ ํ์
์์กด์ฑ(@types
)์ ๊ณ ๋ ค
- ์ฌ์ฉํ๋ ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์
์ ์ธ์ด ํฌํจ๋์ด ์์ง ์์๋,
DefinitelyTyped
์์ ํ์ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. DefinitelyTyped
์ ํ์ ์ ์๋ค์npm
๋ ์ง์คํธ๋ฆฌ์@types
์ค์ฝํ์ ๊ณต๊ฐ๋๋ค.- ์ฐธ๊ณ ๋ก,
@types
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ ์ ๋ณด๋ง ํฌํจํ๊ณ ์์ผ๋ฉฐ ๊ตฌํ์ฒด๋ ํฌํจํ์ง ์๋๋ค. - ์๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๊ฐ
dependencies
์ ์๋๋ผ๋@types
์์กด์ฑ์devDependencies
์ ์์ด์ผ ํ๋ค.
{
"devDependencies": {
"@types/react": "^16.8.19",
"typescript": "^3.5.3"
},
"dependencies": {
"react": "^16.8.6"
}
}
- ์ ์์ ๋ ๋ฐํ์์
@types/react
์typescript
์ ์์กดํ์ง ์๊ฒ ๋ค๋ ๊ฒ์ด๋ค. - ๋ง์ผ ๋ฐํ์์
@types
๊ฐ ํ์ํ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ณ๋์ ์์ ์ด ํ์ํ ์ ์๋ค.
# Item46. ํ์ ์ ์ธ๊ณผ ๊ด๋ จ๋ ์ธ ๊ฐ์ง ๋ฒ์ ์ดํดํ๊ธฐ
# (1) ์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์ ๋ณด์ ๋ฒ์ ์ด ๋ณ๋๋ก ๊ด๋ฆฌ๋๋ ๋ฐฉ์์ ๋ฌธ์ ์
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธํ์ง๋ง ์ค์๋ก ํ์
์ ์ธ์ ์
๋ฐ์ดํธํ์ง ์์ ๊ฒฝ์ฐ
- ์ ๋ฐ์ดํธํด์ผ ํ ํ์ ์ ์ธ์ ๋ฒ์ ์ด ์์ง ์ค๋น๋์ง ์์ ๊ฒฝ์ฐ ๋ณด๊ฐ ๊ธฐ๋ฒ์ผ๋ก ์ฌ์ฉํ๋ ค๋ ์ ํจ์์ ๋ฉ์๋์ ํ์ ์ ๋ณด๋ฅผ ํ๋ก์ ํธ ์์ฒด์ ์ถ๊ฐํ๊ฑฐ๋ ํ์ ์ ์ธ์ ์ ๋ฐ์ดํธ๋ฅผ ์ง์ ์์ฑํ๊ณ ๊ณต๊ฐํ์ฌ ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ํ์
์ ์ธ์ ๋ฒ์ ์ด ์ต์ ์ธ ๊ฒฝ์ฐ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์ ์ธ์ ๋ฒ์ ์ด ๋ง๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ์ฌ๋ฆฌ๊ฑฐ๋ ํ์ ์ ์ธ์ ๋ฒ์ ์ ๋ด๋ฆฐ๋ค.
- ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํ์
์คํฌ๋ฆฝํธ ๋ฒ์ ๋ณด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ์๋ก ํ๋ ํ์
์คํฌ๋ฆฝํธ ๋ฒ์ ์ด ์ต์ ์ธ ๊ฒฝ์ฐ
- ํ์ ์คํฌ๋ฆฝํธ์ ์ต์ ๋ฒ์ ์ ์ฌ์ฉํ์.
@types
์์กด์ฑ์ด ์ค๋ณต๋ ์ ์๋ค.
# (2) ๋ฒ๋ค๋ง ๋ฐฉ์์ ๋ฌธ์ ์
- ๋ฒ๋ค๋ ํ์ ์ ์ธ์ ๋ณด๊ฐ ๊ธฐ๋ฒ์ผ๋ก ํด๊ฒฐํ ์ ์๋ ์ค๋ฅ๊ฐ ์๋ ๊ฒฝ์ฐ, ๋๋ ๊ณต๊ฐ ์์ ์๋ ์ ๋์ํ์ง๋ง ํ์ ์คํฌ๋ฆฝํธ ๋ฒ์ ์ด ์ฌ๋ผ๊ฐ๋ฉด์ ์ค๋ฅ๊ฐ ๋ฐ์ํ๋ ๊ฒฝ์ฐ์ ๋ฌธ์ ๊ฐ ๋๋ค.
- ํ๋ก์ ํธ ๋ด์ ํ์ ์ ์ธ์ด ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์ ์ธ์ ์์กดํ๋ค๋ฉด ๋ฌธ์ ๊ฐ ๋๋ค.
- ํ๋ก์ ํธ์ ๊ณผ๊ฑฐ ๋ฒ์ ์ ์๋ ํ์ ์ ์ธ์ ๋ฌธ์ ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ ๊ณผ๊ฑฐ ๋ฒ์ ์ ๋์๊ฐ์ ํจ์น ์ ๋ฐ์ดํธ๋ฅผ ํด์ผ ํ๋ค.
- ํ์ ์ ์ธ์ ํจ์น ์ ๋ฐ์ดํธ๋ฅผ ์์ฃผ ํ๊ธฐ ์ด๋ ต๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค.
# ๐ ์ ๋ฆฌ
- ํ์ ์ ์ธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจํ๋ ๊ฒ๊ณผ DefinitelyTyped์ ๊ณต๊ฐํ๋ ๊ฒ ์ฌ์ด์ ์ฅ๋จ์ ์ ์ดํดํด์ผ ํ๋ค.
- ํ์ ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ฉด ํ์ ์ ์ธ์ ์์ฒด์ ์ผ๋ก ํฌํจํ๊ณ , ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ผ๋ฉด ํ์ ์ ์ธ์ DefinitelyTyped์ ๊ณต๊ฐํ๋ ๊ฒ์ด ์ข๋ค.
# Item47. ๊ณต๊ฐ API์ ๋ฑ์ฅํ๋ ๋ชจ๋ ํ์ ์ ์ต์คํฌํธํ๊ธฐ
- ๊ณต๊ฐ ๋ฉ์๋์ ๋ฑ์ฅํ ์ด๋ค ํํ์ ํ์
์ด๋ ์ต์คํฌํธํ์.
- ์ด์ฐจํผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๊ฐ ์ถ์ถํ ์ ์์ผ๋ฏ๋ก, ์ต์คํฌํธํ๊ธฐ ์ฝ๊ฒ ๋ง๋๋ ๊ฒ์ด ์ข๋ค.
# Item48. API ์ฃผ์์ TSDoc ์ฌ์ฉํ๊ธฐ
- ์ฌ์ฉ์๋ฅผ ์ํ ๋ฌธ์๋ผ๋ฉด JSDoc ์คํ์ผ์ ์ฃผ์์ผ๋ก ๋ง๋๋ ๊ฒ์ด ์ข๋ค.
- ์๋ํ๋ฉด ๋๋ถ๋ถ์ ํธ์ง๊ธฐ๋ ํจ์๊ฐ ํธ์ถ๋๋ ๊ณณ์์ ํจ์์ ๋ถ์ด ์๋ JSDoc ์คํ์ผ์ ์ฃผ์์ ํดํ์ผ๋ก ํ์ํด ์ฃผ๊ธฐ ๋๋ฌธ์ด๋ค.
- ์ฃผ์์ ์ํ์ฒ๋ผ ์ฅํฉํ๊ฒ ์ฐ์ง ์๋๋ก ์ฃผ์ํด์ผ ํ๋ค.
- ํ๋ฅญํ ์ฃผ์์ ๊ฐ๋จํ ์์ ๋ง ์ธ๊ธํ๋ค.
- JSDoc์๋ ํ์
์ ๋ณด๋ฅผ ๋ช
์ํ๋ ๊ท์น(
@param {string} name ...
)์ด ์์ง๋ง, ํ์ ์คํฌ๋ฆฝํธ์์๋ ํ์ ์ ๋ณด๊ฐ ์ฝ๋์ ์๊ธฐ ๋๋ฌธ์ TSDoc์์๋ ํ์ ์ ๋ณด๋ฅผ ๋ช ์ํ๋ฉด ์ ๋๋ค.