프로그래밍/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에 포함된다.
반응형