2016-12-14 4688 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