898 - Includes
type IsEqual<X, Y> =
(<T>() => T extends X ? 1 : 2) extends
(<T>() => T extends Y ? 1 : 2)
? true
: false;
type Includes<T extends readonly any[], U> = T extends [infer First, ...infer Rest] ? IsEqual<First,U> extends true ? true : Includes<Rest,U> : false
- 기존의 작성했던 코드는 서브타입이 참으로 판단되는 문제가 있었다
- 이를 방지하기 위해 함수형 비교식 각 매개변수를 비교하는 특성을 이용해서 비교를 진행했고 서브타입은 참이 되지 않게 할 수 있었다.
3057 - Push
type Push<T extends readonly any[], U> = [...T , U]
3060 - Unshift
type Unshift<T extends readonly unknown[], U> = [U ,...T]
- 마찬가지로 - 스프레드 연산자를 사용하는 쉬운 문제
3312 Parameters
type MyParameters<T extends (...args: any[]) => any> = T extends (...args: infer S) => any ? S : never
- 함수를 타입에서 파라미터를 반환하는 식이다.
- infer를 이용해 참일 시 파라미터 타입을 반환하도록 처리했다.