typescript 推入元组类型脚本

aamkag61  于 2023-01-31  发布在  TypeScript
关注(0)|答案(1)|浏览(135)

我正在学习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]

这怎么可能呢?

nue99wik

nue99wik1#

这是TypeScript当前设计的一个局限性,并且已经在GitHub上报告过:
microsoft/TypeScript#52375 - Bug: incorrect tuple (array) type after changing in place
TS的现任开发负责人发表了这样的评论:

瑞安·卡瓦诺

从控制流的Angular 来看,不支持数组的原地变异方法,我建议在大多数情况下使用readonly [string, number]
并建议:

瑞安·卡瓦诺

[X]readonly [X]似乎相当好地涵盖了用例。

type StrictTuple<T> = Omit<T, "push" | "pop" | "shift" | "unshift" | "sort">;

因为像indexOfmapevery等的东西可能仍然有用。

相关问题