2017-06-11 3 views
2

Der folgende Code verwendet funktionieren mit Typoskript 2.0:Typoskript Enum Zuordnung Compiler bricht Änderung

function enumDemo() { 
    enum temperature{ 
     cold, 
     hot 
    }; 

    let temp = temperature.cold; 

    switch (temp) { 
     case temperature.cold: 
     console.log("Brrr..."); 
     break; 
     case temperature.hot: 
     console.log("yikes!"); 
     break; 
    } 
} 

enumDemo(); 

Es wird jedoch die folgenden Fehler in tsc 2.3.4 Compiler-Versionen produziert:

Type 'temperature.hot' is not comparable to type 'temperature. 

Was wurde zwischen TypeScript 2.0 und 2.3 geändert?

Antwort

2

bearbeiten

https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes#literal-types-are-inferred-by-default-for-const-variables-and-readonly-properties

Dies ist die Liste der Bruch Änderungen pro Version, verbunden zu dem, was ich denke, ist die Änderung, die Sie suchen. Zusammenfassend:

String-, numerische, boolesche und Enum-Literaltypen werden standardmäßig nicht für const-Deklarationen und schreibgeschützte Eigenschaften abgeleitet. Dies bedeutet, dass Ihre Variablen/Eigenschaften einen engeren Typ als zuvor haben. Dies könnte sich in der Verwendung von Vergleichsoperatoren wie === und! == äußern.

const DEBUG = true; // Now has type `true`, previously had type `boolean` 

if (DEBUG === false) { /// Error: operator '===' can not be applied to 'true' and 'false' 
    ... 
} 

Also vergessen Sie nicht, Sie Typen zu erklären, es ist schließlich Typoskript. Zahl wie folgt:: Wenn Sie temp Temperatur ändern

function enumDemo() { 
    enum temperature{ 
     cold, 
     hot 
    }; 

    let temp: number = temperature.cold; 

    switch (temp) { 
     case temperature.cold: 
     console.log("Brrr..."); 
     break; 
     case temperature.hot: 
     console.log("yikes!"); 
     break; 
    } 
} 

Es sollte gut funktionieren. Was passiert, ist, dass der Compiler versucht, den Aufzählungstyp und nicht die Nummer, die die Aufzählung repräsentiert, zuzuordnen. anstelle eines Enum

export class temperature { 
    public static cold: number = 0; 
    public static hot: number = 1; 
} 
+1

Dieser Code verwendet zu arbeiten, ohne Fehler in Typoskript 2.0

und alternative Methode wäre, eine Klasse mit statischen Mitgliedern zu machen. Die Frage ist "Was wurde zwischen TypScript 2.0 und 2.3 geändert?" –

+0

Danke, ich habe meine Antwort aktualisiert. – Nieminen

+0

Sollte es nicht 'let temp: temperature = temperature.cold;' sein? –