6주차 Item 45 ~ 52
타입스크립트를 시스템 레벨로 설치하면 안된다. 타입스크립트를 프로젝트의 devDependencies에 포함시키고 팀원 모두가 동일한 버전을 사용하도록 해야한다.
@types 의존성은 dependencies가 아니라 devDependencies에 포함시켜야 한다. 런타임에 @types가 필요한 경우라면 별도의 작업이 필요할 수 있다.
라이브러리를 업데이트하는 경우, 해당 @types 역시 업데이트 해야한다.
타입 선언을 라이브러리에 포함하는 것과 DefinitelyTypesd에 공개하는 것 사이의 장단점을 이해해야한다.
타입스크립트로 작성된 라이브러리라면 타입선언을 자체적으로 포함하고, 자바스크립트로 작성된 라이브러리라면 타입 선언을 DefinitelyTypesd에 공개하는 것이 좋다.
interface SecretName {
a: string;
b: string;
}
interface SecretSanta {
name: SecretName;
gift: string;
}
export function getGift(name: SecretName, gift: string): SecretSanta {
//...
}
SecretName와 SecretSanta를 export 하지 않았기 때문에
getGift함수만 import가 가능하다.
그러나 타입들은 export된 함수 시그니처에 등장하기 때문에
아래와 같이 ReturnType과 Parameters로 추출해 낼 수 있다.
type MySanta = ReturnType<typeof getGift>; // SecretSanta
type MyName = Parameters<typeof getGift>[0]; // SecretName
오버로딩 타입보다 조건부 타입을 사용하는 것이 좋다.
조건부 타입은 추가적인 오버로딩 없이 유니온 타입을 지원할 수 있다.