Includes - easy - [Type Challenge]

강성훈·2023년 1월 25일
0

type-challenges

목록 보기
10/20
post-thumbnail

by null @kynefuk

문제

JavaScript의 Array.includes 함수를 타입 시스템에서 구현하세요. 타입은 두 인수를 받고, true 또는 false를 반환해야 합니다.

type isPillarMen = Includes<['Kars', 'Esidisi', 'Wamuu', 'Santana'], 'Dio'> // expected to be `false`

솔루션

type을 2가지 방법으로 만들어보겠다.

1. 첫 번 째 솔루션

배열의 모든 값을 하나씩 비교하는 것이다.

먼저 2개의 타입변수를 비교하는 제네릭을 만들겠다.

type Equals<X, Y> = X extends Y ? true : false;

이제 이를 이용하여 Includes타입을 만들어보겠다.

type Includes<T, U> = ??

여기서 T는 배열 타입이다. 그리고 그 배열에서 두 개를 추론할 것이다.

type Includes<T, U> = T extends [infer Current, ...infer Rest]

현재 다룰 값과 나머지 이렇게 추론한 후 아까 만든 Equals로 값을 비교할 것이다.

type Includes<T, U> = T extends [infer Current, ...infer Rest] ? Equals<Current, U> extends true ? true : Includes<Rest, U> : false;

비교하여 true인지 조건부를 통해 검사하여 true라면 true를 반환하고 아니라면 다시한번 나머지 값들을 다시 Includes로 검사한다. 만약 끝까지 false가 나온다면 false를 반환하게 되는 것이다.

두 번 째 솔루션

아까와 달리 union 타입을 이용하여 조건부를 통해 검사할 것이다.

type Includes<T extends any[], U> = U extends T[number] ? true : false;
profile
고등학생 주니어 개발자

0개의 댓글