{}는 빈 객체입니다. 하지만 TypeScript에서는 null과 undefined를 제외한 모든 값을 의미하는 특수한 타입이기도 합니다.
그래서 다음 코드가 있다고 한다면 …
type A = {}
let a: A;
다음 코드는 모두 문제가 없습니다.
a = "hello";
a = 123;
a = true;
a = [];
a = {};
a = () => {};
그러나 다음 코드는 에러입니다.
a = null; a = undefined;
그럼 {} 타입은 어디에 쓰는 물건일까요? 바로 NonNullable 입니다. NonNullable은 다음처럼 작성되어져 있습니다.
type NonNullable<T> = T & {}
NonNullable은 타입에서 null과 undefined를 제외시킨 타입을 만들어줍니다. 아래코드처럼요.
type T0 = NonNullable<string | number | undefined>; // type T0 = string | number type T1 = NonNullable<string[] | null | undefined>; // type T1 = string[]
NonNullable의 구현은 TypeScript의 버전에 따라 다른데요. 좀더 오래된 4.8에서는 다음처럼 구현되어 있다는 점도 알아두시면 좋습니다.
type NonNullable<T> =
T extends null | undefined
? never
: T;
