문제
JavaScript의 Array.includes
함수를 타입 시스템에서 구현하세요.
배열과 인자를 받아서 인자가 배열에 속해있다면 true
를, 속해있지 않다면 false
를 반환해야 합니다.
예시:
type isPillarMen = Includes<['Kars', 'Esidisi', 'Wamuu', 'Santana'], 'Dio'> // expected to be `false`
풀이
type Includes<T extends readonly any[], U> = T extends [infer K, ...infer R]
? Equal<K, U> extends true
? true
: Includes<R, U>
: false;
T extends [infer K, ...infer R]
배열 안에서 spread operator를 사용해서 배열 내부의 원소에 접근합니다.
배열의 첫 원소를 infer K
로 변수 선언 해줍니다.
Equal<K, U> extends true
첫 원소 K가 제네릭 U와 동일한지 판단합니다. utils의 Equal을 활용합니다.
Includes<R, U>
만약 첫 원소 K가 제네릭 U와 동일하지 않다면 재귀 함수를 사용해서 다음 원소와 비교합니다.
'Frontend > Type-Challenge' 카테고리의 다른 글
[타입챌린지/type-challenge] Readonly (0) | 2023.01.26 |
---|---|
[타입챌린지/type-challenge] Pick (0) | 2023.01.26 |
[타입챌린지/type-challenge] Awaited (0) | 2023.01.25 |
[타입챌린지/type-challenge] First of Array (0) | 2023.01.23 |
[타입챌린지/type-challenge] Hello World (0) | 2023.01.23 |