固定长度的元组

Posted

技术标签:

【中文标题】固定长度的元组【英文标题】:Tuple with fixed length 【发布时间】:2019-02-28 07:24:53 【问题描述】:

元组中的打字稿允许添加以前使用过的任何类型的额外元素,但我想限制长度。我试过& 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] 的分配不会产生错误。如何指定对应的类型?

【问题讨论】:

这里有一些解决方案:***.com/questions/41139763/… @colxi,其实从3.1版本开始就没有这个问题了。 元组不会阻止您在数组初始化后添加/删除键,但有一些解决方案可以实现安全的 FixedLengthArray 类型签名 @colxi,是的,我明白你对这个问题的回答。 【参考方案1】:

如果您使用的是 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 的元组中超出范围。

【讨论】:

【参考方案2】:

使用类型never for array tail:

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

你会得到

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

类型“4”不能分配给类型“从不”。

【讨论】:

以上是关于固定长度的元组的主要内容,如果未能解决你的问题,请参考以下文章

Typescript:根据枚举成员的数量获取一个固定长度的元组

使用 AliasableEvalFunc 并在 Java UDF 中读取一组元组

C#中的元组对象Tuple

python3元组

python

好好学python · 元组