✍ 공부/TypeScript

[type-challenges] Exclude

Po_tta_tt0 2023. 5. 23. 18:24
반응형

 

 

 

0. 문제

T에서 U에 할당할 수 있는 타입을 제외하는 제네릭을,  Exclude<T,U>를 사용하지 않고 구현하세요

 

 

 

1. 설명

type MyExclude<T, U> = T extends U ? never : T


/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

type cases = [
  Expect<Equal<MyExclude<'a' | 'b' | 'c', 'a'>, 'b' | 'c'>>,
  Expect<Equal<MyExclude<'a' | 'b' | 'c', 'a' | 'b'>, 'c'>>,
  Expect<Equal<MyExclude<string | number | (() => void), Function>, string | number>>,
]

type MyExclude<T, U> = T extends U ? never : T
T가 U를 extends하면 => T는 'a'. 'b'. 'c' 가 차례대로 들어오고 있다
이 때 'a'를 만나게 되면(U == 'a'일 때)
never로 넘겨주고 나머지는 그냥 다시 T를 남긴다.

 

type A = MyExclude<'a' | 'b' | 'c', 'a' | 'b'>
type A는 'c'이다. 'a' | 'b' 가 U('a'|'b')를 extends 했기 때문에 사라지고 남은 c만 남는 것.

반응형