2016-12-14 4691 views
14

冒着证明我缺乏TypeScript类型知识的风险 - 我有以下问题。TypeScript - 固定长度数组<length>类型?

当你做了一个这样的数组的类型声明...

position: Array<number>; 

...这将让你与任意长度的数组。然而,如果你想要一个包含具有特定长度的数字的数组,例如3,对于x,y,z组件,你可以为一个固定长度的数组创建一个类型,像这样?

position: Array<3> 

任何帮助或澄清赞赏!

回答

29

JavaScript的数组具有接受所述阵列的长度的构造:

let arr = new Array<number>(3); 
console.log(arr); // [undefined × 3] 

然而,这只是初始大小,有上改变,没有限制:

arr.push(5); 
console.log(arr); // [undefined × 3, 5] 

打字稿具有tuple types它让你定义一个特定长度和类型的阵列:

let arr: [number, number, number]; 

arr = [1, 2, 3]; // ok 
arr = [1, 2]; // Type '[number, number]' is not assignable to type '[number, number, number]' 
arr = [1, 2, "3"]; // Type '[number, number, string]' is not assignable to type '[number, number, number]' 
+0

Brilli蚂蚁回答 - 完美工作 – henryJack

+7

元组类型仅检查初始大小,因此在初始化后仍然可以将无限量的“数字”推送到“arr”。 – benjaminz

+0

没错,它在运行时仍然是“随时随地”的javascript。至少打字稿译员会至少在源代码中执行此操作 – henryJack