我正在学习TypeScript,特别是tuple
类型。根据文档,这是tuple
的定义:
元组类型是另一种Array类型,它确切地知道它包含多少个元素,以及它在特定位置确切地包含哪些类型。
我试过这个:
let test : [string,number] ;
test = ['a',2];
console.log(test); // output ["a", 2]
现在,当我尝试为test
变量分配无效值时:
test = ['a',2,5] // Error : Type '[string, number, number]' is not assignable to type '[string, number]'.
然而,当我尝试在test
内部进行tp push时,编译器没有任何抱怨
test.push(5) // NO ERROS
console.log(test) // output ["a", 2, 5]
这怎么可能呢?
1条答案
按热度按时间nue99wik1#
这是TypeScript当前设计的一个局限性,并且已经在GitHub上报告过:
microsoft/TypeScript#52375 - Bug: incorrect tuple (array) type after changing in place
TS的现任开发负责人发表了这样的评论:
瑞安·卡瓦诺:
从控制流的Angular 来看,不支持数组的原地变异方法,我建议在大多数情况下使用
readonly [string, number]
。并建议:
瑞安·卡瓦诺:
[X]
和readonly [X]
似乎相当好地涵盖了用例。因为像
indexOf
、map
、every
等的东西可能仍然有用。