43 - Exclude
- #Type Challenges
- #TypeScript
질문
T에서 U에 할당할 수 있는 타입을 제외하는 내장 제네릭 Exclude<T, U>를 이를 사용하지 않고 구현하세요.
예시:
type Result = MyExclude<'a' | 'b' | 'c', 'a'> // 'b' | 'c'
// !collapse(1:30) collapsed
/* _____________ 테스트 케이스 _____________ */
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>>,
]선행 지식
- 유니온의 분배 법칙
// 1. 기본 공식 (정의)
T extends U ? X : Y
// 2. T에 유니온 타입 (A | B | C)이 들어올 경우의 실제 동작
(A extends U ? X : Y)
| (B extends U ? X : Y)
| (C extends U ? X : Y)T가 유니온이면 각 타입에 대해 조건이 분배되어 계산된다.