如何在Typescript中键入动态大小的数组?

时间:2019-06-28 19:34:21

标签: typescript typescript-typings

我想输入一个数组,其中第一个元素始终是数字,其余元素始终是字符串,长度至少为1。

这是我的最大努力:

type MyArray =
  | [number]
  | [number, string]
  | [number, string, string]
  | [number, string, string, string];

我如何使它永远持续下去?

1 个答案:

答案 0 :(得分:1)

在TypeScript 3.0之前,没有什么比您所拥有的联合更好的了。但是随后引入了一系列相关的新功能,以更好地支持元组类型,尤其是它们与功能参数列表的关系。而且,由于函数支持以最后一个rest parameter表示不确定数量的参数类型作为数组,因此引入一个最终rest element in a tuple表示不确定数量的元组元素的类型作为数组是有意义的。

嘿,事实上,您的用例在文档中被明确提到作为示例:

  

例如,[number, ...string[]]表示具有number元素的元组,后跟任意数量的string元素。

所以我们尝试一下:

type MyArray = [number, ...string[]];
const okay0: MyArray = [0]; // okay
const okay1: MyArray = [1, "a"]; // okay
const okay2: MyArray = [2, "a", "b"]; // okay
const okay3: MyArray = [3, "a", "b", "c", "d", "e", "f", "g", "h", "i", "j"]; // okay

const bad0: MyArray = [0, "a", false]; // error!
//    ~~~~ <-- boolean is not assignable to string
const bad1: MyArray = ["x", "y"]; // error!
//                     ~~~ <-- string is not assignable to number
const bad2: MyArray = []; // error!
//    ~~~~ <--- property '0' is missing (i.e., bad2[0] is missing)

对我很好。希望能有所帮助;祝你好运!

Link to code