Skip to content

Latest commit

 

History

History
31 lines (22 loc) · 1.32 KB

TupleToNestedObject.md

File metadata and controls

31 lines (22 loc) · 1.32 KB
标题 标签
TupleToNestedObject(数组转嵌套接口) extends, array,infer(继承, 数组,推断)

数组转嵌套接口。

  • 第一个参数 T 和第二个参数 U,使用 infer 关键字推断,如果 T 继承由第一项 F 和剩余项 R 组成的数组,则返回一个接口,属性名约定就是 F,并使用&与 string 求交集,属性值则递归的调用,注意递归的参数,第一个参数应是剩余的数组项 R,而第二个参数则继续是 U,否则返回第二个参数。

代码如下:

type TupleToNestedObject<T, U> = T extends [infer F, ...infer R]
  ? {
      [K in F & string]: TupleToNestedObject<R, U>;
    }
  : U;

使用方式:

type aTupleToNestedObject = TupleToNestedObject<['a'], string>; // {a: string}
type bTupleToNestedObject = TupleToNestedObject<['a', 'b'], number>; // {a: {b: number}}
type cTupleToNestedObject = TupleToNestedObject<[], boolean>; // boolean. if the tuple is empty, just return the U type

应用场景

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