我想输入一个数组,其中第一个元素始终是数字,其余元素始终是字符串,长度至少为1。
这是我的最大努力:
type MyArray =
| [number]
| [number, string]
| [number, string, string]
| [number, string, string, string];
我如何使它永远持续下去?
答案 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)
对我很好。希望能有所帮助;祝你好运!