더북(TheBook)

마지막으로 타입에서 nullundefined를 제거하는 NonNullable 타입을 만들어보겠습니다.

type MyNonNullable<T> = T extends null | undefined ? never : T;
type Result = MyNonNullable<string | number | null | undefined>;
// type Result = string | number

Tstring | number | null | undefined 타입이라고 해봅시다. 제네릭과 유니언이 만났으므로 분배법칙이 실행되어 NonNullable<string> | NonNullable<number> | NonNullable<null> | NonNullable<undefined>가 됩니다. 여기서 다시 string | number | never | never가 되고, 최종적으로는 string | number가 됩니다.

하지만 이것은 예전 코드이고 요즘은 NonNullable 타입이 다음과 같이 더 간단하게 변경되었습니다.

type MyNonNullable<T> = T & {};

Tstring | number | null | undefined라고 해봅시다. {}stringnumber는 포함하나 nullundefined는 포함하지 않습니다. 따라서 T{}의 교집합은 string | number입니다. 이러한 이유로 NonNullable 타입이 T & {}로 간소화되었습니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.