๐ค Chapter 6. ํ์
์ ์ธ๊ณผ @types
๐ฅ ์์ดํ
45. devDependencies์ typescript์ @types
์ถ๊ฐํ๊ธฐโ
npm(node package manager)์ ์ธ ๊ฐ์ง ์ข ๋ฅ์ ์์กด์ฑ์ ๊ตฌ๋ถํด์ ๊ด๋ฆฌํ๋ฉฐ, ๊ฐ๊ฐ์ ์์กด์ฑ์ package.json ํ์ผ ๋ด์ ๋ณ๋ ์์ญ์ ๋ค์ด ์์ต๋๋ค.
-
dependencies ํ์ฌ ํ๋ก์ ํธ๋ฅผ ์คํํ๋ ๋ฐ ํ์์ ์ธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ๋ฉ๋๋ค. ํ๋ก์ ํธ์ ๋ฐํ์์ lodash๊ฐ ์ฌ์ฉ๋๋ค๋ฉด dependencies์ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
-
devDependencies ํ์ฌ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ํ ์คํธํ๋ ๋ฐ ์ฌ์ฉ๋์ง๋ง, ๋ฐํ์์๋ ํ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํจ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ๋ก์ ํธ์์ ์ฌ์ฉ ์ค์ธ ํ ์คํธ ํ๋ ์์ํฌ๊ฐ devDependencies์ ํฌํจ๋ ์ ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ํ๋ก์ ํธ๋ฅผ npm์ ๊ณต๊ฐํ์ฌ ๋ค๋ฅธ ์ฌ์ฉ์๊ฐ ํด๋น ํ๋ก์ ํธ๋ฅผ ์ค์นํ๋ค๋ฉด, devDependencies์ ํฌํจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์ ์ธ๋ฉ๋๋ค.
-
peerDependencies ๋ฐํ์์ ํ์ํ๊ธด ํ์ง๋ง, ์์กด์ฑ์ ์ง์ ๊ด๋ฆฌํ์ง ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ด ํฌํ๋ฉ๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ๋ ๊ฐ๋ฐ ๋๊ตฌ์ผ ๋ฟ์ด๊ณ ํ์ ์ ๋ณด๋ ๋ฐํ์์ ์กด์ฌํ์ง ์๊ธฐ ๋๋ฌธ์ ํ์ ์คํฌ๋ฆฝํธ์ ๊ด๋ จ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ผ๋ฐ์ ์ผ๋ก devDependencies์ ์ํฉ๋๋ค.
๋ชจ๋ ํ์
์คํฌ๋ฆฝํธ ํ๋ก์ ํธ์์ ๊ณตํต์ ์ผ๋ก ๊ณ ๋ คํด์ผ ํ ์์กด์ฑ ๋ ๊ฐ์ง๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
์ฒซ ๋ฒ์งธ, ํ์
์คํฌ๋ฆฝํธ ์์ฒด ์์กด์ฑ์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ํ์
์คํฌ๋ฆฝํธ๋ฅผ ์์คํ
๋ ๋ฒจ๋ก ์ค์นํ ์๋ ์์ง๋ง ๋ค์ ๋ ๊ฐ์ง ์ด์ ๋๋ฌธ์ ์ถ์ฒํ์ง๋ ์์ต๋๋ค.
- ํ์๋ค ๋ชจ๋๊ฐ ํญ์ ๋์ผํ ๋ฒ์ ์ ์ค์นํ๋ค๋ ๋ณด์ฅ์ด ์์ต๋๋ค.
- ํ๋ก์ ํธ๋ฅผ ์ ์ ํ ๋ ๋ณ๋์ ๋จ๊ณ๊ฐ ์ถ๊ฐ๋ฉ๋๋ค.
๋ฐ๋ผ์ ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์คํ ๋ ๋ฒจ๋ก ์ค์นํ๊ธฐ๋ณด๋ค๋ devDependencies์ ๋ฃ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ ๋ฒ์งธ, ํ์
์์กด์ฑ(@types
)์ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ์ฌ์ฉํ๋ ค๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์
์ ์ธ์ด ํฌํจ๋์ด ์์ง ์๋๋ผ๋, Definitely/Typed์์ ํ์
์ ๋ณด๋ฅผ ์ป์ ์ ์์ต๋๋ค.
์๋ณธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฒด๊ฐ dependencies์ ์๋๋ผ๋ @types
์์กด์ฑ์ devDependencies์ ์์ด์ผ ํฉ๋๋ค.
๐ฅ ์์ดํ 46. ํ์ ์ ์ธ๊ณผ ๊ด๋ จ๋ ์ธ ๊ฐ์ง ๋ฒ์ ์ดํดํ๊ธฐโ
ํ์ ์คํฌ๋ฆฝํธ๋ ์์์ ์์กด์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด ์ฃผ๊ธฐ๋์ปค๋ , ์์กด์ฑ ๊ด๋ฆฌ๋ฅผ ์คํ๋ ค ๋ ๋ณต์กํ๊ฒ ๋ง๋ญ๋๋ค. ์๋ํ๋ฉด ํ์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ ์ธ ๊ฐ์ง ์ฌํญ์ ์ถ๊ฐ๋ก ๊ณ ๋ คํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์
- ํ์
์ ์ธ(
@types
)์ ๋ฒ์ - ํ์ ์คํฌ๋ฆฝํธ์ ๋ฒ์
์ธ ๊ฐ์ง ๋ฒ์ ์ค ํ๋๋ผ๋ ๋ง์ง ์์ผ๋ฉด, ์์กด์ฑ๊ณผ ์๊ด์์ด ๋ณด์ด๋ ๊ณณ์์ ์๋ฑํ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ์์ ์ผ๋ฐ์ ์ผ๋ก ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๋ฐฉ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ํน์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ dependencies๋ก ์ค์นํ๊ณ , ํ์ ์ ๋ณด๋ devDependencies๋ก ์ค์นํฉ๋๋ค.
$ npm install react
+ react@16.8.6
$ npm install --save-dev @types/react
+ react@16.8.19
๋ฉ์ด์ ๋ฒ์ ๊ณผ ๋ง์ด๋ ๋ฒ์ ์ด ์ผ์นํ์ง๋ง ํจ์น ๋ฒ์ ์ ์ผ์นํ์ง ์๋๋ค๋ ์ ์ ์ฃผ๋ชฉํ๊ธธ ๋ฐ๋๋๋ค.
์ค์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์ ๋ณด์ ๋ฒ์ ์ด ๋ณ๋๋ก ๊ด๋ฆฌ๋๋ ๋ฐฉ์์ ๋ค์ ๋ค ๊ฐ์ง ๋ฌธ์ ์ ์ด ์์ต๋๋ค.
์ฒซ ๋ฒ์งธ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์
๋ฐ์ดํธํ์ง๋ง ์ค์๋ก ํ์
์ ์ธ์ ์
๋ฐ์ดํธํ์ง ์์ ๊ฒฝ์ฐ์
๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์
๋ฐ์ดํธ์ ๊ด๋ จ๋ ์๋ก์ด ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ค ํ ๋๋ง๋ค ํ์
์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค.
์ผ๋ฐ์ ์ธ ํด๊ฒฐ์ฑ
์ ํ์
์ ์ธ๋ ์
๋ฐ์ดํธํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ์ ๋ง์ถ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ์
๋ฐ์ดํธํด์ผ ํ ํ์
์ ์ธ์ ๋ฒ์ ์ด ์์ง ์ค๋น๋์ง ์์ ๊ฒฝ์ฐ๋ผ๋ฉด ๋ ๊ฐ์ง ์ ํ์ง๊ฐ ์์ต๋๋ค. ๋ณด๊ฐ ๊ธฐ๋ฒ์ ํ์ฉํ์ฌ ๋ฐฉ๋ฒ๊ณผ ํ์
์ ์ธ์ ์
๋ฐ์ดํธ๋ฅผ ์ง์ ์์ฑํ๊ณ ๊ณต๊ฐํ์ฌ ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ๋ ๋ฐฉ๋ฒ๋ ์์ต๋๋ค.
๋ ๋ฒ์งธ, ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ํ์ ์ ์ธ์ ๋ฒ์ ์ด ์ต์ ์ธ ๊ฒฝ์ฐ์ ๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ๋ ํ์ ์ ๋ณด ์์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ์ค๋ค๊ฐ ํ์ ์ ์ธ์ ์ค์นํ๋ ค๊ณ ํ ๋ ๋ค๋ฆ๊ฒ ๋ฐ์ํฉ๋๋ค. ํด๊ฒฐ์ฑ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์ ์ ์ธ์ ๋ฒ์ ์ด ๋ง๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ์ ์ฌ๋ฆฌ๊ฑฐ๋ ํ์ ์ ์ธ์ ๋ฒ์ ์ ๋ด๋ฆฌ๋ ๊ฒ์ ๋๋ค.
์ธ ๋ฒ์งธ, ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํ์
์คํฌ๋ฆฝํธ ๋ฒ์ ๋ณด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ํ์๋ก ํ๋ ํ์
์คํฌ๋ฆฝํธ ๋ฒ์ ์ด ์ต์ ์ธ ๊ฒฝ์ฐ์
๋๋ค. ํ์ฌ ํ๋ก์ ํธ๋ณด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๊ฒ ํ์ํ ํ์
์คํฌ๋ฆฝํธ ๋ฒ์ ์ด ๋์ ์ํฉ์ด๋ผ๋ฉด, @types
์ ์ธ ์์ฒด์์ ํ์
์ค๋ฅ๊ฐ ๋ฐ์ํ๊ฒ ๋ฉ๋๋ค. ์ด ์ค๋ฅ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ํ๋ก์ ํธ์ ํ์
์คํฌ๋ฆฝํธ ๋ฒ์ ์ ์ฌ๋ฆฌ๊ฑฐ๋, ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์
์ ์ธ์ ๋ฒ์ ์ ์๋๋๋ก ๋ด๋ฆฌ๊ฑฐ๋, declare module
์ ์ธ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ์
์ ๋ณด๋ฅผ ์์ ๋ฒ๋ฆฌ๋ฉด ๋ฉ๋๋ค.
๋ค ๋ฒ์งธ, @types
์์กด์ฑ์ด ์ค๋ณต๋ ์๋ ์์ต๋๋ค. ์ ์ญ ๋ค์์คํ์ด์ค์ ์๋ ํ์
์ ์ธ ๋ชจ๋์ด๋ผ๋ฉด ๋๋ถ๋ถ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. ์ ์ญ ๋ค์์คํ์ด์ค์ ํ์
์ ์ธ์ด ์กด์ฌํ๋ฉด ์ค๋ณต๋ ์ ์ธ, ๋๋ ์ ์ธ์ด ๋ณํฉ๋ ์ ์๋ค๋ ์ค๋ฅ๋ก ๋ํ๋๊ฒ ๋ฉ๋๋ค.
ํ์ ์คํฌ๋ฆฝํธ์์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ค๋ ๊ฒ์ ์ฝ์ง ์์ ์ผ์ด์ง๋ง, ์ ๊ด๋ฆฌํ๋ค๋ฉด ๊ทธ์ ๋ฐ๋ฅธ ๋ณด์์ด ํจ๊ป ์กด์ฌํฉ๋๋ค. ์ ์์ฑ๋ ํ์ ์ ์ธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ฐ๋ ๋ฐ ๋์์ด ๋๋ฉฐ ์์ฐ์ฑ ์ญ์ ํฌ๊ฒ ํฅ์ํ ์ ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ณต๊ฐํ๋ ค๋ ๊ฒฝ์ฐ, ํ์ ์ ์ธ์ ์์ฒด์ ์ผ๋ก ํฌํจํ๋ ๊ฒ๊ณผ ํ์ ์ ๋ณด๋ง ๋ถ๋ฆฌํ์ฌ DefinitelyTyped์ ๊ณต๊ฐํ๋ ๊ฒ์ ์ฅ๋จ์ ์ ๋น๊ตํด ๋ด์ผ ํฉ๋๋ค. ๊ณต์์ ์ธ ๊ถ์ฅ์ฌํญ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ํ์ ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๊ฒฝ์ฐ์๋ง ํ์ ์ ์ธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํฌํจํ๋ ๊ฒ์ ๋๋ค. ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ํ์ ์ ์ธ์ DefinitelyTyped์ ๊ณต๊ฐํ์ฌ ์ปค๋ฎค๋ํฐ์์ ๊ด๋ฆฌํ๊ณ ์ ์ง๋ณด์ํ๋๋ก ๋งก๊ธฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๐ฅ ์์ดํ 47. ๊ณต๊ฐ API์ ๋ฑ์ฅํ๋ ๋ชจ๋ ํ์ ์ ์ต์คํฌํธ ํ๊ธฐโ
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์์๋ ํ๋ก์ ํธ ์ด๊ธฐ์ ํ์ ์ต์คํฌํธ๋ถํฐ ์์ฑํด์ผ ํฉ๋๋ค. ๋ง์ฝ ํจ์์ ์ ์ธ์ ์ด๋ฏธ ํ์ ์ ๋ณด๊ฐ ์๋ค๋ฉด ์ ๋๋ก ์ต์คํฌํธ ๋๊ณ ์๋ ๊ฒ์ด๋ฉฐ, ํ์ ์ ๋ณด๊ฐ ์๋ค๋ฉด ํ์ ์ ๋ช ์์ ์ผ๋ก ์์ฑํด์ผ ํฉ๋๋ค.
๋ง์ฝ ์ด๋ค ํ์ ์ ์จ๊ธฐ๊ณ ์ถ์ด์ ์ต์คํฌํธ ํ์ง ์์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
interface SecretName {
first: string;
last: string;
}
interface SecretSanta {
name: SecretName;
gift: string;
}
export function getGift(name: SecretName, gift: string): SecretSanta {
// ...
}
ํด๋น ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๋ SecretName
๋๋ SecretSanta
๋ฅผ ์ง์ ์ํฌํธํ ์ ์๊ณ , getGift
๋ง ์ํฌํธ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฌ๋ ํ์
๋ค์ ์ต์คํฌํธ๋ ํจ์ ์๊ทธ๋์ฒ์ ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์ ์ถ์ถํด ๋ผ ์ ์์ต๋๋ค. ์ถ์ถํ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ Parameters
์ ReturnType
์ ๋๋ฆญ ํ์
์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.
type MySanta = ReturnType<typeof getGift>; // SecretSanta
type MaName = Parameters<typeof getGift>[0]; // SecretName
๋ง์ฝ ํ๋ก์ ํธ์ ์ตํต์ฑ์ ์ํด ํ์ ๋ค์ ์ผ๋ถ๋ฌ ์ต์คํฌํธ ํ์ง ์์๋ ๊ฒ์ด๋ผ๋ฉด, ์ธ๋ฐ์๋ ์์ ์ ํ ์ ์ ๋๋ค. ๊ณต๊ฐ API ๋งค๊ฐ๋ณ์์ ๋์ด๋ ์๊ฐ ํ์ ์ ๋ ธ์ถ๋๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ๊ตณ์ด ์จ๊ธฐ๋ ค ํ์ง ๋ง๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์๋ฅผ ์ํด ๋ช ์์ ์ผ๋ก ์ต์คํฌํธ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๐ฅ ์์ดํ 48. API ์ฃผ์์ TSDoc ์ฌ์ฉํ๊ธฐโ
์ฌ์ฉ์๋ฅผ ์ํ ๋ฌธ์๋ผ๋ฉด JSDoc ์คํ์ผ์ ์ฃผ์์ผ๋ก ๋ง๋๋ ๊ฒ์ด ์ข์ต๋๋ค. ์๋ํ๋ฉด ๋๋ถ๋ถ์ ํธ์ง๊ธฐ๋ ํจ์๊ฐ ํธ์ถ๋๋ ๊ณณ์์ ํจ์์ ๋ถ์ด ์๋ JSDoc ์คํ์ผ์ ์ฃผ์์ ํดํ์ผ๋ก ํ์ํด ์ฃผ๊ธฐ ๋๋ฌธ์ ๋๋ค.
/** ์ธ์ฌ๋ง์ ์์ฑํฉ๋๋ค. ๊ฒฐ๊ณผ๋ ๋ณด๊ธฐ ์ข๊ฒ ๊พธ๋ฉฐ์ง๋๋ค. */
function greetJSDoc(name: string, title: string) {
return `Hello ${title} ${name}`;
}
ํ์
์คํฌ๋ฆฝํธ ์ธ์ด ์๋น์ค๊ฐ JSDoc ์คํ์ผ์ ์ง์ํ๊ธฐ ๋๋ฌธ์ ์ ๊ทน์ ์ผ๋ก ํ์ฉํ๋ ๊ฒ์ด ์ขใ
๋ธ๋๋ค. ๋ง์ฝ ๊ณต๊ฐ API์ ์ฃผ์์ ๋ถ์ธ๋ค๋ฉด JSDoc ํํ๋ก ์์ฑํด์ผ ํฉ๋๋ค. JSDoc์๋ @param