TypeScript führt viele Funktionen statisch kompilierter Sprachen ein, wie etwa Klassen (jetzt Teil von JavaScript), Schnittstellen, Generika und Union-Typen. Aber heute gibt es einen Typ, der ausführlich besprochen werden muss, und das ist Enum. Für viele statische Sprachen ist die Aufzählung ein sehr gängiges Sprachmerkmal. Zum Beispiel C, C#, Java und Swift. Eine Aufzählung ist eine Reihe von Konstanten, die Sie in Ihrem Code verwenden können. Wir verwenden TypeScript, um eine neue Aufzählung zur Darstellung der Wochentage zu erstellen: enum Wochentag { Sonntag, Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag }; Diese Aufzählung wird mit dem Schlüsselwort „enum“ gefolgt vom Namen des Wochentags deklariert. Dann definieren wir die Konstanten, die in der Aufzählung verwendet werden können. Jetzt definieren wir eine Methode, die einen Parameter dieses Aufzählungstyps akzeptiert, um zu bestimmen, ob der übergebene Parameter ein Wochenende ist. Funktion istDasWochenende(Tag:Wochentag) { Schalter (Tag) { Fall Wochentag.Sonntag: Fall Wochentag.Samstag: gibt true zurück; Standard: gibt false zurück; } } Schließlich können wir Folgendes verwenden: console.log(istEsDasWochenende(Wochentag.Montag)); // log: false Dies ist eine sehr nützliche Methode zum Eliminieren von Magic Strings in Programmen. Allerdings sind die Dinge bei weitem nicht so einfach, wie wir denken. Was ergibt der folgende Codeaufruf nach der TypeScript-Kompilierung? console.log(isItTheWeekend(2)); // ist das gültig? Sie werden schockiert sein, wenn Sie das Ergebnis erfahren. Solche Aufrufe entsprechen den TypeScript-Regeln und der Compiler wird erfolgreich kompiliert. Was ist passiert?Die obige Situation könnte Sie zu der Annahme verleiten, Sie hätten einen TypeScript-Fehler gefunden. Tatsächlich ist TypeScript so konzipiert. Wir haben hier eine neue numerische Aufzählung erstellt und können das kompilierte Ergebnis im TypeScript Playground sehen: var Wochentag; (Funktion (Wochentag) { DayOfWeek[DayOfWeek["Sonntag"] = 0] = "Sonntag"; Wochentag[Wochentag["Montag"] = 1] = "Montag"; DayOfWeek[DayOfWeek["Dienstag"] = 2] = "Dienstag"; DayOfWeek[DayOfWeek["Mittwoch"] = 3] = "Mittwoch"; DayOfWeek[DayOfWeek["Donnerstag"] = 4] = "Donnerstag"; DayOfWeek[DayOfWeek["Freitag"] = 5] = "Freitag"; Wochentag[Wochentag["Samstag"] = 6] = "Samstag"; })(Wochentag || (Wochentag = {})); Das Ergebnis ist: Tatsächlich ist eine Aufzählung ein JavaScript-Objekt. Die Eigenschaften dieses Objekts werden entsprechend den von mir definierten Aufzählungskonstanten generiert und die entsprechenden Zahlen werden entsprechend der definierten Reihenfolge generiert (in der Reihenfolge ist Sonntag 0 und Samstag 6). Dieses Objekt hat auch Eigenschaften mit Zahlen als Schlüssel und entsprechenden konstanten Zeichenfolgen als Werte. Daher können wir Zahlen an die obige Methode übergeben und die Zahlen werden den entsprechenden Enumerationswerten zugeordnet. Eine Aufzählung ist sowohl eine numerische Konstante als auch eine Zeichenfolgenkonstante. VerwendungWenn eine Methode einen Parameter vom Aufzählungstyp empfängt, wird jedoch eine beliebige Zahl kompiliert. Ein solches Ergebnis zerstört offensichtlich das von TypeScript erstellte Typsicherheitssystem. Wann kann dies verwendet werden? Angenommen, Sie haben einen Dienst, der eine JSON-Zeichenfolge zurückgibt, und Sie möchten diese Zeichenfolge so modellieren, dass eine bestimmte Eigenschaft eine Aufzählung ist. Was Sie in Ihrer Datenbank speichern, sind Zahlen. Dies kann einfach durch die Definition einer TypeScript-Aufzählung gelöst werden: const day: Wochentag = 3; Diese explizite Typkonvertierung, die während der Zuweisung durchgeführt wird, wandelt die Zahl in die entsprechende Konstante der Aufzählung um. Mit anderen Worten: Die Verwendung dieser Aufzählung im Code trägt dazu bei, dass der Code leichter lesbar ist. Steuern der Anzahl der AufzählungenDie den Mitgliedern der Aufzählung entsprechenden Zahlen werden in der durch die Aufzählungskonstanten definierten Reihenfolge generiert. Können wir den Wert dieser Zahl kontrollieren? Ja, das können Sie. Aufzählung FileState { Lesen = 1, Schreiben = 2 } Nur eine Aufzählung, die die möglichen Zustände einer Datei beschreibt. Es kann sich entweder um einen Lese- oder einen Schreibzustand handeln, und wir definieren den Enumerationswert explizit. Nun ist klar, welche Werte sinnvoll sind, denn diese sind explizit definiert. BitwertEs gibt jedoch einen anderen Fall, in dem es sehr nützlich ist: der Bitwert. Schauen wir uns die FileState-Enumeration noch einmal an und fügen ihr einen neuen Enumerationswert ReadWrite hinzu: Aufzählung FileState { Lesen = 1, Schreiben = 2, Lesen/Schreiben = 3 } Nehmen wir dann an, es gibt eine Methode, die einen Parameter dieses Typs akzeptiert: const file = await getFile("/Pfad/zur/Datei", FileState.Read | FileState.Write); Wir haben den |-Operator auf FileState verwendet. Auf diese Weise können wir bitweise Operationen verwenden, um einen neuen Enumerationswert zu erhalten. In diesem Beispiel ist es 3, der Wert von ReadWrite. Eigentlich können wir es noch deutlicher ausdrücken: Aufzählung FileState { Lesen = 1, Schreiben = 2, ReadWrite = Lesen | Schreiben } Der Wert dieses ReadWrite ist nicht fest codiert, sondern wird durch eine bitweise Operation ermittelt. Aber seien Sie vorsichtig, wenn Sie solche Enumerationen verwenden. Folgende Aufzählung: Aufzählung Foo { A = 1, B = 2, C = 3, D = 4, E = 5 } Wenn wir E (oder 5) erhalten möchten, können wir dies mit bitweisen Operationen tun: Foo.A | Foo.D oder Foo.B | Foo.C? Wenn Sie also bitweise Operationen mit Enumerationswerten durchführen möchten, müssen Sie wissen, wie Sie den Wert erhalten. KontrollindexNormalerweise hat jeder Enumerationswert einen numerischen Standardwert. Bei Bedarf können Sie diesen Enumerationswerten auch explizit Werte zuweisen. Darüber hinaus können Sie bestimmten Teilen der Aufzählung auch Werte zuweisen: enum Wochentag { Sonntag, Montag, Dienstag, Mittwoch = 10, Donnerstag, Freitag, Samstag } Die ersten Werte werden nach Position vergeben, von 0 bis 2 für Sonntag bis Dienstag. Dann wird am Mittwoch ein neuer Wert vergeben und von da an wird jeder Wert um 1 erhöht. Dies kann zu Problemen führen: enum Wochentag { Sonntag, Montag, Dienstag, Mittwoch = 10, Donnerstag = 2, Freitag, Samstag } Dienstag wird der Wert 2 zugewiesen. Wie sieht das generierte JavaScript aus? var Wochentag; (Funktion (Wochentag) { DayOfWeek[DayOfWeek["Sonntag"] = 0] = "Sonntag"; Wochentag[Wochentag["Montag"] = 1] = "Montag"; DayOfWeek[DayOfWeek["Dienstag"] = 2] = "Dienstag"; DayOfWeek[DayOfWeek["Mittwoch"] = 10] = "Mittwoch"; DayOfWeek[DayOfWeek["Donnerstag"] = 2] = "Donnerstag"; DayOfWeek[DayOfWeek["Freitag"] = 3] = "Freitag"; Wochentag[Wochentag["Samstag"] = 4] = "Samstag"; })(Wochentag || (Wochentag = {})); Es sieht so aus, als ob Dienstag und Donnerstag beide einen Wert von 2 haben. Daher muss der eingestellte Wert angezeigt werden. Nicht numerische AufzählungBisher haben wir nur numerische Aufzählungen besprochen, aber Aufzählungswerte müssen keine Zahlen sein. Es kann sich auch um einen beliebigen konstanten oder berechneten Wert handeln: enum Wochentag { Sonntag = "So", Montag = "Mon", Tuesday = "Dienstag", Mittwoch = "Mi", Donnerstag = "Donnerstag", Freitag = "Fr", Samstag = „Sa“ } Jetzt können Sie der Methode isItTheWeekend keinen numerischen Parameter mehr übergeben. Diese Aufzählung ist keine numerische Aufzählung mehr. Allerdings können wir hier keine beliebigen Strings übergeben, da durch die Enumeration bekannt ist, welche Werte sinnvoll sind. Dies wirft auch ein weiteres Problem auf: const day: Wochentag = "Montag"; Das wird nicht funktionieren. Strings können nicht direkt an Enumerationen zugewiesen werden, sondern erfordern eine explizite Typkonvertierung: const day = "Mon" als Wochentag; enum Verwirrend { A, B = 1, C = 1 << 8, D = 1 + 2, E = "Hallo Welt".Länge } Die Aufzählungswerte in diesem Beispiel sind alle Zahlen. Allerdings können diesen auch direkt numerische Werte, berechnete Werte oder die Längeneigenschaft eines Strings zugewiesen werden. Wenn es sich bei allen um Konstanten handelt, können es Werte unterschiedlichen Typs sein: enum MehrVerwirrung { A, B = 2, C = "C" } In diesem Fall ist es schwierig zu verstehen, wie die Daten hinter der Aufzählung funktionieren. Daher ist es am besten, solche Aufzählungen nicht zu verwenden. abschließendDie Enumerationen von TypeScript sind eine großartige Ergänzung zu JavaScript und können bei richtiger Verwendung sehr nützlich sein. Es hilft dabei, die im Code vorhandenen magischen Wertezeichenfolgen und Zahlen zu bereinigen. Und es ist typsicher. Damit ist dieser Artikel über die Probleme von TypeScript Enum abgeschlossen. Weitere Informationen zu TypeScript Enum finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: Mysql teilt Zeichenfolge durch gespeicherte Prozedur in Array auf
>>: Konzept und Anwendungsbeispiele für die MySQL-Indexkardinalität
Vorwort Ich bin bei der Arbeit auf folgende Situa...
1. Optimieren Sie die Nginx-Parallelität [root@pr...
Verstehen Sie zunächst eine Methode: Aufrufen ein...
Inhaltsverzeichnis 1. Zwei setState, wie oft soll...
1. Fügen Sie die folgenden Abhängigkeiten in pom....
Inhaltsverzeichnis Filter 01.Was ist 02. Wie es g...
Überblick Im vorherigen Kapitel haben wir die Fil...
Inhaltsverzeichnis Installieren Sie Sakila Index-...
Um die Anforderungen effizient zu erfüllen und au...
Inhaltsverzeichnis 1. Einleitung 2. Mehrere wicht...
Vorwort Beim Anlegen der Primär- und Fremdschlüss...
MySQL Version 5.0 begann, gespeicherte Prozeduren...
Da die in der MySQL-Datenbank gespeicherten Daten...
Ich habe kürzlich bei einem praktischen Trainings...
1. Übersicht über Inner Join-Abfragen Der Inner J...