TIL/TypeScript

[TypeScript] 이펙티브 타입스크립트 item 50 ~ 52

JoJobum 2022. 8. 9.

item 50

오버로딩 타입보다는 조건부 타입 사용하기

조건부 타입은 추가적인 오버로딩 없이 유니온 타입을 지원할 수 있음

// 오버로딩 타입
function double(x: number | string): number | string;

// 조건부 조건 
function dobule<T extends number | string>(
  x: T
): T extends string ? string : number; //=> string 의 부분 집합이면 string, 그외는 number

function double(x: any) {
  return x + x;
}

 

item 51

의존성 분리를 위해 미러 타입 사용하기

 

필수가 아닌 의존성을 분리할 때는 구조적 타이핑을 사용

 

작성 중인 라이브러리가 의존하는 라이브러리의 구현과 무관하게 타입에만 의존한다면,

필요한 선언부만 추출하여 작성중인 라이브러리에 넣는 것(미러링) 고려해볼만 함

다만 의존성이 복잡해지만 이를 적용하기 어려움

 

item 52

타입 선언을 테스트하기 매우 어려움 => 단언문으로 때우기 십상

 

dtslint는 할당 가능성을 체크하는 대신 각 심벌의 타입을 추출하여 글자 자체가 같은지 비교한다

단점으로는  number|string string|number는 같은 타입이지만 글자 자체로 보면 다르기 때문에 다른 타입으로 인식된다.

 

실제 반환 타입 테스트하는 것이 좋은 테스트 코드

타입을 테스트할 때는 함수 타입의 동일성과 할당 가능성의 차이점

콜백이 있는 함수를 테스트할 때,콜백 매개변수의 추론된 타입을 체크해야함

테스트에서 any 주의해야함

반응형

댓글