打字稿多维数组类型

Ifa*_*uki 0 javascript typescript

目前我有一个具有这种类型的数组:

handlers: string[][]
Run Code Online (Sandbox Code Playgroud)

它有例如: [["click", "inc"], ["mousedown", "dec"]]

现在我想将我的结构更改为:

[[{ handler: "click", modifiers: ["enter"] }, "inc"]]
Run Code Online (Sandbox Code Playgroud)

我如何定义我的第二个 arra 的第一个元素是一个包含名为handlerand的属性的对象modifiers

Krz*_*ski 5

Typescript 具有元组类型,可让您定义具有特定长度和类型的数组:

let arr: [number, number, number];

arr = [1, 2, 3]; // ok
arr = [1, 2]; // Type '[number, number]' is not assignable to type '[number, number, number]'
arr = [1, 2, "3"]; // Type '[number, number, string]' is not assignable to type '[number, number, number]'
Run Code Online (Sandbox Code Playgroud)

所以只需使用如下类型:

handlers: [{handler: string, modifiers: string[]}, string][]
Run Code Online (Sandbox Code Playgroud)

一种替代方法,当仅在第一个元素上需要此类型时:

interface MyInterface {
  [index: number]: string[] | [{handler: string, modifiers: string[]}, string];
  0: [{handler: string, modifiers: string[]}, string];
}
Run Code Online (Sandbox Code Playgroud)

或者当该类型仅在使用Variadic 元组类型时才有效

type MyType = [[{handler: string, modifiers: string[]}, string], ...string[][]]
Run Code Online (Sandbox Code Playgroud)