Skip to content

Latest commit

 

History

History
33 lines (24 loc) · 1.05 KB

Flatten.md

File metadata and controls

33 lines (24 loc) · 1.05 KB
标题 标签
Flatten(展开数组) extends,array,recursively(继承,数组,递归)

展开数组。

  • 类型有 2 个参数,第一个参数表示泛型 S,继承任意类型的数组,第二个参数是一个任意类型的数组,存储第一个参数的所有数组项,默认是空数组。
  • 递归的用 infer 关键字推断数组 S,是否继承 X 和 Y 的组合,然后将第二个参数数组填充满,最后返回数组 T。

代码如下:

type Flatten<A extends any[], T extends any[] = []> = A extends [
  infer X,
  ...infer Y
]
  ? X extends any[]
    ? Flatten<[...X, ...Y], T>
    : Flatten<[...Y], [...T, X]>
  : T;

使用方式:

type flattenFlatten = Flatten<[1, 2, [3, 4], [[[5]]]]>; // [1, 2, 3, 4, 5]

应用场景

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