kakasoo

타입 레벨에서 포함 관계를 검사하는 Includes 타입 구현하기 본문

프로그래밍/TypeScript

타입 레벨에서 포함 관계를 검사하는 Includes 타입 구현하기

카카수(kakasoo) 2023. 2. 9. 01:07
반응형
type Includes<T extends readonly any[], U> =
  T extends [infer P, ...infer R] ? // T가 P와 나머지 R로 이루어진 배열이라면, 즉 length가 최소한 1 이상인 경우라면
    Equal<U, P> extends true ? true : Includes<R, U> // U가 P랑 같다면 true, 아니라면 Includes를 재귀적으로 호출한다.
    : false

Includes에서 재귀적으로 호출해야 한다는 사실을 알기 전까지는 머리카락이 다 빠질 것만 같았다.
왜냐하면 boolean이나 객체와 같은 경우에는 단순히 그 값을 U extends T[number] 형식으로 비교할 수 없기 때문이다.
true는 boolean에 포함된다.

반응형