[TypeScript] infer

방정식의 미지수와 같은 역할을 하는 연산자입니다.

배열 요소의 타입을 추론하는 예시를 통해 알아봅니다.

type ArrayElementType<T> = T extends (infer E)[] ? E : never 

const names = ["Jun", "Smith"]
const numbers = [1, 2, 3]
const union = ["Hello", 123]

type Name = ArrayElementType<typeof names> // string
type Num = ArrayElementType<typeof numbers> // number
type Union = ArrayElementType<typeof union> // string | number

TypeScript는 전달받은 T가 어떤 타입인지 정확히 알고 있습니다.

extends를 이용해 배열이 어떤 타입인지 검사합니다.

string[](infer E)[]가 일치합니다.

즉, TypeScript는 Estring으로 추론하고, 이 값을 타입으로 할당합니다.