이펙티브 타입스크립트 (댄 밴더캄 지음) 를 읽고 정리
📍요약
✅퍼블릭 API에 코드가 노출되면 타입을 추출하는 방법은 무궁무진하다
- 따라서 사용 편의성을 위해 가능한 모든 타입을 export 해주는 것이 좋다
📍라이브러리 사용자가 타입 정보를 직접 작성해야 한다면
✅일반적으로 모든 타입 정보가 잘 export 되어야 하지만,
그렇지 않다면, 명시적으로 작성해야 한다
✅타입 정보를 추출할 도구가 많기 때문에 의도적으로 타입 정보를 숨기는 것은 불가능하다
예시) ReturnType, Parameters 제네릭 타입을 활용해 타입 정보를 추출
// export하지 않은 인터페이스
interface SecretName {
first: string;
last: string;
}
interface SecretSanta {
name: SecretName;
gift: string;
}
// export된 함수
export function getGift(name: SecretName, gift: string): SecretSanta {
// COMPRESS
return {
name: {
first: 'Dan',
last: 'Van',
},
gift: 'MacBook Pro',
};
// END
}
// 반환타입 추출
type MySanta = ReturnType<typeof getGift>; // SecretSanta
// 매개변수를 배열로 추출
type MyName = Parameters<typeof getGift>[0]; // SecretName