jaenny.dev
article thumbnail

문제

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와 동일하지 않다면 재귀 함수를 사용해서 다음 원소와 비교합니다.

profile

jaenny.dev

@jaenny.dev

Go Beyond! Front-end developer, jaenny✨