반응형
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만 남는 것.
반응형
'✍ 공부 > TypeScript' 카테고리의 다른 글
[type-challenges] If (0) | 2023.05.23 |
---|---|
[type-challenges] Awaited (0) | 2023.05.23 |
[type-challenges] Length of Tuple (0) | 2023.05.23 |
[type-challenges] First of Array (0) | 2023.05.23 |
[type-challenges] Tuple to Object (0) | 2023.05.16 |