Skip to content

Latest commit

 

History

History
36 lines (26 loc) · 1.11 KB

Without.md

File metadata and controls

36 lines (26 loc) · 1.11 KB
标题 标签
Without(去除数组元素) extends,array(继承,数组)

去除数组元素。

  • 使用 infer 推断数组的每一项,如果和第二个参数 U 相匹配,则去除,否则保留,并且递归的执行。
  • 但是由于第二个参数可能是数组,因此需要将第二个参数转成联合类型来比较。转成联合类型如下所示:
type toUnion<T> = T extends any[] ? T[number] : T;

代码如下:

type Without<T, U> = T extends [infer F, ...infer R]
  ? F extends toUnion<U>
    ? Without<R, U>
    : [F, ...Without<R, U>]
  : T;

使用方式:

type WithoutRes = Without<[1, 2], 1>; // expected to be [2]
type WithoutRes1 = Without<[1, 2, 4, 1, 5], [1, 2]>; // expected to be [4, 5]
type WithoutRes2 = Without<[2, 3, 2, 3, 2, 3, 2, 3], [2, 3]>; // expected to be []

应用场景

如下所示, 鼠标悬浮到对应的类型变量可以查看类型。