2016-09-21 7 views
10

Betrachten Sie das folgende Typoskriptbeispiel. Die erste Zeile führt zu einem Fehler 'type undefined [] kann nicht type [string]' zugewiesen werden. Die letzten beiden Zeilen kompilieren.Unterschied zwischen string [] und [string]

let givesAnError: [string] = []; 
let isOK: string[] = []; 
let isAlsoOK: [string] = ["foo"]; 

Wie möchten Sie die Typdefinition [string] in Maschinenschrift zu interpretieren haben?

Antwort

12

Die erste (givesAnError) und letzte (isAlsoOK) are tuples und die zweite (isOK) ist ein Array.

Bei Arrays alle Ihre Elemente sind vom gleichen Typ:

let a: string[]; 
let b: boolean[]; 
let c: any[]; 

Aber mit Tupeln können Sie verschiedene Typen haben (und eine feste Länge):

let a: [string, boolean, number]; 
let b: [any, any, string]; 

So:

a = ["str1", true, 4]; // fine 
b = [true, 3, "str"]; // fine 

Aber:

a = [4, true, 3]; // not fine as the first element is not a string 
b = [true, 3]; // not fine because b has only two elements instead of 3 

Es ist wichtig zu verstehen, dass die Javascript-Ausgabe immer Arrays verwendet, da es kein Tupel in js gibt.
Aber für die Kompilierungszeit ist es nützlich.

Verwandte Themen