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
Diese Geschichte beginnt heute mit einer unerwarte...
1. Stoppen Sie zuerst den mysqld.exe-Prozess 2. Ö...
Vorherige Wörter Zeilenhöhe, Schriftgröße und vert...
vue-element-admin importiert Komponentenkapselung...
Die Installation von MySQL 8.0.12 dauerte zwei Ta...
1. Funktion: xargs kann die durch Leerzeichen ode...
Webdesign ist eine aufstrebende Randbranche, die n...
In diesem Artikel wird der spezifische Code von V...
asynchrone Funktion und await-Schlüsselwort in JS...
Vorwort Dieser Artikel stellt hauptsächlich die A...
Beim Konfigurieren eines Clusters ist ein Problem...
Wenn wir unter CentOS 7 den Host-Port mit einem B...
Verwenden Sie HTML-Farbblöcke, um Daten dynamisch...
Dieser Artikel beschreibt die Installation des Sy...
Inhaltsverzeichnis Einführung und Demo API: Conta...