Never를 안쓴다고 했었는데 쓴다.
type Indexable<T> = T extends string
? never
: T extends number
? never
: T extends boolean
? never
: T extends undefined
? never
: T extends Function
? never
: T & { [index: string]: any }
A | B
Type Guards와 함께 사용하면, 타입을 또 좁힐 수 있다.
function position(value: string | number) {
if (typeof value === 'string') {
return value.indexOf('');
}
// 여기부터 value는 무조건 number
return value;
}
if
로 앞에서 걸러 내면 나머지 타입 추론을 할 수 있다. 아주 똑똑하다.함수를 하나 만들어서 타입 체크를 할 수 있다.