算法
- 通过递归来做
- 理解前序和中序,寻找根节点和左右子节点的两种序列关系
- 注意设置边界
ts
Exclude
// ============= 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
// extends作用于联合类型时会遍历每个元素,见手册中分布式条件类型