2016-12-14 1 views
14

Auf die Gefahr, meine Unkenntnis über TypScript-Typen zu demonstrieren - ich habe die folgende Frage.TypeScript - Array fester Länge <length> Typ?

Wenn Sie eine Typdeklaration für ein Array wie diese machen ...

position: Array<number>; 

... es wird Ihnen ein Array mit beliebiger Länge. Wenn Sie jedoch ein Array mit Zahlen mit einer bestimmten Länge, d. H. 3 für x, y, z-Komponenten möchten, können Sie einen Typ mit einer festen Länge Array, so etwas?

position: Array<3> 

Jede Hilfe oder Klarstellung geschätzt!

Antwort

29

Die JavaScript-Array hat einen Konstruktor, der die Länge des Arrays übernimmt: hat

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

Maschinenschrift:

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

Dies ist jedoch nur die Anfangsgröße, gibt es keine Beschränkung auf der Veränderung, dass tuple types mit denen Sie ein Array mit einer bestimmten Länge und Typen definieren können:

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 ant antwort - funktioniert einwandfrei – henryJack

+7

Die Tupeltypen überprüfen nur die Anfangsgröße, so dass Sie nach der Initialisierung unbegrenzt viele "number" in Ihr "arr" schieben können. – benjaminz

+0

Wahr, es ist immer noch Javascript zur Laufzeit zu "alles geht" an diesem Punkt. Zumindest das Typoskript transpiler wird dies zumindest im Quellcode erzwingen – henryJack

Verwandte Themen