固定长度的元组
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:根据枚举成员的数量获取一个固定长度的元组