2022-9-9

35 阅读1分钟

算法

  1. 通过递归来做
  2. 理解前序和中序,寻找根节点和左右子节点的两种序列关系
  3. 注意设置边界

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作用于联合类型时会遍历每个元素,见手册中分布式条件类型