Never

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 }

Union Types

Type Guards와 함께 사용하면, 타입을 또 좁힐 수 있다.

function position(value: string | number) {
  if (typeof value === 'string') {
    return value.indexOf('');
  }
	
	// 여기부터 value는 무조건 number
  return value;
}

Custom type guards

함수를 하나 만들어서 타입 체크를 할 수 있다.