Ich bin neu in TypeScript und ich verstehe nicht, was ich tun muss, um die Zeile zu reparieren, die den TS7015-Fehler erzeugt (Verweis auf ein enum-Element mit einer String-Variablen), weil die unmittelbar folgende Zeile keinen Fehler enthält (referenziert) Ein Enum-Member mit einem String-Literal):
%Vor% "noImplicitAny": true
wird im tsconfig.json
des Projekts gesetzt, wenn der Fehler erkannt wurde
"noImplictAny": false
wird im tsconfig.json
des Projekts gesetzt, es wurde kein Fehler festgestellt
Ich kompiliere mit "ntypescript": "^1.201603060104.1"
Ich kompiliere jetzt mit "tsc": "1.8.10"
Überprüfung der Installation:
%Vor% Hier ist meine tsconfig.json
-Datei:
Hier ist die Compiler-Ausgabe:
%Vor% Ich vermute, dass dies mit der neuen Unterstützung von TS 1.8.x für Zeichenfolgenliterale in diesen Situationen zu tun hat. TS weiß, dass "Happy" ein gültiger String-Index ist, aber es weiß nicht, ob enumKey
sein wird oder nicht. Sie können es beheben, indem Sie es wie folgt in ein <any>
umwandeln:
(Übrigens, ich denke das ist neu: Ich konnte diesen Fehler nicht mit 1.8.9 reproduzieren, aber sobald ich auf 1.8.10 aktualisiert habe, könnte ich das.)
Interessanterweise hätte ich auch erwartet, dass dies ohne den Fehler funktioniert, aber es nicht:
%Vor%Muss etwas über die TS-Spezifikation sein, die ich nicht verstehe, oder vielleicht sind sie einfach noch nicht dazu gekommen, dieses Bit zu reparieren.
Wenn Sie TypeScript 2.1+ verwenden, können Sie den Typ enumKey
wie folgt in keyof typeof State
ändern:
oder, wenn die Eingabe der Funktion ein string
sein muss, dies:
Erläuterung:
Der Fehler wird generiert, weil TypeScript, das eine beliebige Zeichenfolge ist, nicht weiß, ob enumKey
der Name eines Mitglieds von State
ist. TypeScript 2.1+ führte den Operator keyof
ein, der eine Vereinigung der bekannten öffentlichen Eigenschaften eines Typs zurückgibt. Mit keyof
können wir feststellen, dass die Eigenschaft tatsächlich im Zielobjekt ist.
Beim Erstellen einer Enumeration erzeugt TypeScript jedoch sowohl einen Typ (der immer ein Untertyp von number
ist) als auch einen Wert (das enum-Objekt, das Sie können in Ausdrücken referenzieren). Wenn Sie keyof State
schreiben, erhalten Sie tatsächlich eine Vereinigung der wörtlichen Eigenschaftsnamen von number
. Um stattdessen die Eigenschaftsnamen des Enum-Objekts zu erhalten, können Sie keyof typeof State
verwenden.
Quellen:
Tags und Links typescript