Diese Frage enthält viele gemischte Informationen. Lassen Sie uns daher die gesamte Implementierung von TypeScript 2.x + in Nicks Handbuch zur Verwendung von Enums in Modellen mit TypeScript behandeln .
Dieses Handbuch richtet sich an Personen, die clientseitigen Code erstellen, der eine Reihe bekannter Zeichenfolgen vom Server aufnimmt, die auf der Clientseite bequem als Enum modelliert werden.
Definieren Sie die Aufzählung
Beginnen wir mit der Aufzählung. Es sollte ungefähr so aussehen:
export enum IssueType {
REPS = 'REPS',
FETCH = 'FETCH',
ACTION = 'ACTION',
UNKNOWN = 'UNKNOWN',
}
Zwei Dinge, die hier zu beachten sind:
Wir deklarieren diese explizit als Zeichenfolgen-Backed-Enum-Fälle, die es uns ermöglichen, sie mit Zeichenfolgen zu instanziieren, nicht mit anderen nicht verwandten Zahlen.
Wir haben eine Option hinzugefügt, die in unserem Servermodell möglicherweise vorhanden ist oder nicht : UNKNOWN
. Dies kann so gehandhabt werden, wie undefined
Sie es bevorzugen, aber ich vermeide es | undefined
, wenn möglich, Typen zu verwenden, um die Handhabung zu vereinfachen.
Das Tolle an einem UNKNOWN
Fall ist, dass Sie im Code wirklich offensichtlich sein und Stile für unbekannte Enum-Fälle hellrot und blinkend erstellen können, damit Sie wissen, dass Sie mit etwas nicht richtig umgehen.
Analysieren Sie die Aufzählung
Möglicherweise verwenden Sie diese Aufzählung, die in ein anderes Modell eingebettet ist, oder ganz alleine, aber Sie müssen die Aufzählung mit String-y-Typ aus JSON oder XML (ha) in Ihr stark typisiertes Gegenstück analysieren. Wenn dieser Parser in ein anderes Modell eingebettet ist, befindet er sich im Klassenkonstruktor.
parseIssueType(typeString: string): IssueType {
const type = IssueType[typeString];
if (type === undefined) {
return IssueType.UNKNOWN;
}
return type;
}
Wenn die Aufzählung richtig analysiert wird, wird sie als der richtige Typ angezeigt. Andernfalls wird es sein undefined
und Sie können es abfangen und Ihren UNKNOWN
Fall zurückgeben. Wenn Sie es vorziehen, undefined
als unbekannten Fall zu verwenden, können Sie einfach jedes Ergebnis der versuchten Enum-Analyse zurückgeben.
Von dort aus müssen Sie nur noch die Analysefunktion und Ihre neu stark typisierte Variable verwenden.
const strongIssueType: IssueType = parseIssueType('ACTION');
// IssueType.ACTION
const wrongIssueType: IssueType = parseIssueType('UNEXPECTED');
// IssueType.UNKNOWN
--noImplicitAny
(in VS deaktiviert "Implizite 'beliebige' Typen zulassen"). Es produzierterror TS7017: Index signature of object type implicitly has an 'any' type.
Für mich hat das funktioniert:var color: Color = (<any>Color)[green];
(getestet mit Version 1.4)