// ============= Test Cases =============
import type { Equal, Expect } from './test-utils'
type cases = [
Expect<Equal<MyExclude<'a' | 'b' | 'c', 'a'>, Exclude<'a' | 'b' | 'c', 'a'>>>,
Expect<Equal<MyExclude<'a' | 'b' | 'c', 'a' | 'b'>, Exclude<'a' | 'b' | 'c', 'a' | 'b'>>>,
Expect<Equal<MyExclude<string | number | (() => void), Function>, Exclude<string | number | (() => void), Function>>>,
]
// ============= Your Code Here =============
type MyExclude<T, U> = T extends U ? never : T;
Ts 是结构化类型的,父子类型的判断往往是结构是否一致
T extends U 用于区分 T是否为U的子类型
如果为U的子类型则 never(类型窄化) 可以理解为剔除
任何的类型值 T | never ⇒ T
T extends U ? T : T
T ⇒ ‘a’ | ‘b’ | ‘c’
U ⇒ ‘a’ | ‘b’
⇒ T
T extends U ? never: T
⇒ ‘a’ | ‘b’ | never
⇒ ‘a’ | ‘b’