固定长度的元组

时间:2018-09-24 18:16:26

标签: arrays typescript tuples

元组中的

Typescript允许添加以前使用的任何类型的额外元素,但我想限制长度。我已经尝试过& { length: 2 }but it didn't helped

declare var a: [string, number] & { length: 2 };

a[0] = "1"
a[1] = 2;
a[2] = "3";
a[3] = 4;

[2][3]的分配不会产生错误。如何指定对应的类型?

2 个答案:

答案 0 :(得分:7)

使用类型never for array tail

declare var a: [string, number, ...never[]];

你会得到

  

类型'“ 3”'不能分配给'从不'。

  

类型'4'不能分配给类型'从不'。

答案 1 :(得分:0)

如果您使用的是Typescript 3.1或更高版本,则无需对元组添加特殊限制:

declare var a: [string, number];

您可能会注意到该代码

declare var a: [string, number];

a[0] = "1"
a[1] = 2;
a[2] = "3";
a[3] = 4;

compiles in 3.0.1,但doesn't compile in 3.1.6包含消息

索引“ 2”超出了长度为2的元组的范围。
索引“ 3”超出了长度为2的元组的范围。