VorwortDas Beste an TS ist die starke Typisierung, der eine Typverengung folgt. Ich werde es zusammenfassen, wenn ich schon dabei bin. TypinferenzIn TypeScript hilft die Typinferenz dabei, Typen bereitzustellen, wo keine expliziten Typen vorhanden sind. Beispiel: let x = [0, 1, null] // Zahl let x = Math.random() < 0,5 ? 100 : "HalloWort" // Zahl|Zeichenfolge let x: Tier[] = [neues Nashorn(), neuer Elefant(), neue Schlange()]; // Nashorn | Elefant | Schlange Wenn kein bester gemeinsamer Typ gefunden wird, ist das Ergebnis der Typinferenz ein Union-Array-Typ. Union-Typen und Typwächter Beispiel: // Union-Typ Typ Typen = Zahl | Zeichenfolge Funktion typeFn(Typ: Typen, Eingabe: Zeichenfolge): Zeichenfolge { // Wenn Sie dies schreiben, müssen Sie den Typ des Typs bestimmen} Kann Typinferenz direkt zuweisen let x:Zahl|Zeichenfolge = 1 x="gebunden" Wenn Sie keine Beurteilung vornehmen, wird eine Fehlermeldung angezeigt. Funktion typeFn(Typ: Zahl | Zeichenfolge, Eingabe: Zeichenfolge) { // Fehleroperator + kann nicht auf String angewendet werden gibt neues Array zurück (Typ + 1).join("") + Eingabe } Wir müssen also urteilen Funktion typeFn(Typ: Zahl | Zeichenfolge, Eingabe: Zeichenfolge) { // Typschutz wenn (Typ von Typ === 'Zahl') { gibt neues Array zurück (Typ + 1).join(" ") + Eingabe } Rückgabetyp + Eingabe } Bei der Typeingrenzung wird ein spezifischerer Typ basierend auf dem Beurteilungstyp neu definiert Die Frage ist also, warum man das lernen sollte. Ist js nicht gut? Persönliche Meinung: Durch die Verwendung von TypeScript können Sie die Anfälligkeit von JavaScript als schwache Sprache verringern und das Fehlerrisiko durch falsche Typen sowie das Fehlerrisiko durch das Mischen verschiedener JavaScript-Versionen reduzieren. TypeScript führt einfach die wichtigste Funktion der starken Typisierung höherer Sprachen in JavaScript ein und löst damit das Problem, unerwartete Fehler zu vermeiden, die beim Schreiben von JavaScript-Code durch die Konvertierung des Datentyps verursacht werden und die Fehlerbehebung erschweren. Typwächter für typeof: "Schnur" "Nummer" "bigint" // ES10 fügt "boolean" hinzu "Symbol" // ES6 fügt "undefined" hinzu "Objekt" "Funktion" Hinweis: typeof null ist gleich object daher: Funktion strOrName(str: string | string[] | null) { wenn (Typ von str === 'Objekt') { für (const s von str) { // Fehler melden, da str null sein könnte Konsole.log(s) } } sonst wenn (Typ von str === 'Zeichenfolge') { console.log(str) } anders { //...... } } Einengung des WahrheitswertsDie Wahrheitstabelle von js ist sehr kompliziert. Außer dem Folgenden, das falsch ist, sind alle anderen wahr. 0 NAN "" 0n // Bigint-Version von 0 null undefiniert Um Nullfehler zu vermeiden, können Sie die Wahrheitswertverengung verwenden // Verwende den wahren Wert um zu entscheiden, ob (str && typeof strs === 'object') { für (const s von strs) { Konsole.log(s) } } Oder das ist auch OK Funktion valOrName(Werte: Zahl[] | undefiniert, Filter: Zahl): Zahl[] | undefiniert { wenn (!Werte) { Rückgabewerte } anders { Rückgabewerte.Filter(x => x > Filter) } } Zusammenfassung: Die Einengung des Wahrheitswerts hilft uns, null/undefiniert/0 und andere Werte besser zu handhaben Einschränkung der GleichheitWenn Sie die Gleichheit eingrenzen möchten, können Sie Operatoren wie ===, !==, ==, und und != verwenden, um die Gleichheit einzuschränken. Beispiel 1: Funktion strOrNum(x: Zeichenfolge | Zahl, y: Zeichenfolge | Boolescher Wert) { wenn (x === y) { // Zeichenfolge } anders { // Zeichenfolge|Zahl } } Beispiel 2: Funktion strOrName(str: string | string[] | null) { wenn (str !== null) { wenn (Typ von str === 'Objekt') { für (const s von str) { konsole.log(s) // [] } } sonst wenn (Typ von str === 'Zeichenfolge') { console.log(str) // Zeichenfolge } anders { // ..... } } } Beispiel 3: Schnittstellentypen { Wert: Zahl | null | undefiniert } Funktion valOrType(Typ: Typen, val: Zahl) { // null und undefined sind beide falsch und können nur Zahlen sein wenn (Typ.Wert != null) { Typ.Wert *= Wert } } bei der Operatoreingrenzungprüft, ob eine Eigenschaft im Objekt vorhanden ist und fungiert nun als „Typwächter“. Beispiel: Schnittstelle A { a: Zahl }; Schnittstelle B { b: Zeichenfolge }; Funktion foo(x: A | B) { wenn ("a" in x) { Rückgabe xa; } Rückgabe xb; } Eingrenzung von instanceofDie rechte Seite eines Instanceof-Ausdrucks muss vom Typ „any“ oder von einem Typ sein, der dem Funktionsschnittstellentyp zugewiesen werden kann. Beispiel: Funktion dateInval(x: Datum | Zeichenfolge) { wenn (x Instanz von Datum) { // Datum } anders { // Zeichenfolge } } Die Natur der VerengungDas Wesentliche der Einengung ist die Neudefinition des Typs Beispiel: Funktion Beispiel() { let x: Zeichenfolge | Zahl | Boolescher Wert x = Math.random() < 0,5 wenn (Math.random() < 0,5) { x = 'hallo' // Zeichenfolge } anders { x = 100 // Zahl } return x; // Zeichenfolge|Zahl } Eingrenzung von Union-TypenBeispiel 1: Schnittstelle Form { Art: "Kreis" | "Quadrat", Redius?: Zahl Seitenlänge?: Zahl } // Fehlerfunktion getArea(shape: Shape) { returniere Math.PI * shape.redius ** 2 } // Eingrenzung oder Fehlerfunktion getArea(shape: Shape) { wenn (Form.Art === 'Kreis') { returniere Math.PI * shape.redius ** 2 } } //Verwenden einer Assertion ungleich NULL-Funktion getArea(shape: Shape) { wenn (Form.Art === 'Kreis') { gib Math.PI * Form.redius zurück! ** 2 } } Beispiel 2: Schnittstelle Kreis { Art: "Kreis"; Redius: Zahl; } Schnittstelle Quadrat { Art: "Quadrat"; Redius: Zahl; } Typ Form = Kreis | Quadrat Funktion getArea(Form: Form) { if (shape.kind === 'cirle') { // schmal return Math.PI * shape.redius ** 2 } } // oder Funktion getArea(shape: Shape) { Schalter (Form.Art) { Fall "Kreis": returniere Math.PI * shape.redius ** 2 Fall "Quadrat": returniere Form.Seitenlänge ** 2 Standard: const _example: nie = Form returniere _Beispiel } } ZusammenfassenDies ist das Ende dieses Artikels über TypeScript-Lernhinweise zur Typverengung. Weitere relevante Inhalte zur TypeScript-Typverengung finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird! Das könnte Sie auch interessieren:
|
<<: So ändern Sie die Master-Slave-Replikationsoptionen in MySQL online
>>: Schritte zum Upgrade des Ubuntu 16.04-Kernels
Frage: Ich habe in Vue ein Formular zum Hochladen...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis 1. Übersicht 2. Speicherverwal...
1. Ziehen Sie das MySQL-Image Holen Sie sich das ...
1. Einleitung Im Projekt wird MySQL verwendet. Ic...
Vorwort Die Sprachklassifikation von SQL umfasst ...
Der Code kann noch weiter optimiert werden. Aus Z...
Vorwort Das Tag <router-link> ist ein großa...
Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort ve...
Deepin 2014 herunterladen und installieren Zum He...
Linux-Version: CentOS 7 [root@azfdbdfsdf230lqdg1b...
Nachdem ich das System heute neu installiert hatt...
Inhaltsverzeichnis 2. Stapelanalyse mit pt-pmap 3...
Die Hauptunterschiede sind folgende: 1. MySQL ver...
Diese Technik stammt aus diesem Artikel - So anim...