TypeScript-Lernhinweise: Typeingrenzung

TypeScript-Lernhinweise: Typeingrenzung

Vorwort

Das Beste an TS ist die starke Typisierung, der eine Typverengung folgt. Ich werde es zusammenfassen, wenn ich schon dabei bin.

Typinferenz

In 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 Wahrheitswerts

Die 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 Gleichheit

Wenn 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 Operatoreingrenzung

prü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 instanceof

Die 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 Verengung

Das 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-Typen

Beispiel 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
  }
}

Zusammenfassen

Dies 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:
  • TypeScript-Typinferenz
  • Grundlegende TypeScript-Datentypen
  • Erweiterte TypeScript-Typen, die Sie nicht kennen (Zusammenfassung)
  • TypeScript-Lernhinweise: Grundlegende Typen

<<:  So ändern Sie die Master-Slave-Replikationsoptionen in MySQL online

>>:  Schritte zum Upgrade des Ubuntu 16.04-Kernels

Artikel empfehlen

So handhaben Sie Bilder in Vue-Formularen

Frage: Ich habe in Vue ein Formular zum Hochladen...

jQuery erzielt Vollbild-Scrolling-Effekt

In diesem Artikelbeispiel wird der spezifische Co...

So erstellen Sie eine MySQL-Master-Slave-Datenbank mit Docker unter MacOS

1. Ziehen Sie das MySQL-Image Holen Sie sich das ...

Verwendung von MySQL DDL-Anweisungen

Vorwort Die Sprachklassifikation von SQL umfasst ...

Schwebendes Menü, kann einen Bildlaufeffekt nach oben und unten erzielen

Der Code kann noch weiter optimiert werden. Aus Z...

So erweitern Sie Vue Router-Links in Vue 3

Vorwort Das Tag <router-link> ist ein großa...

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort vergessen?

Was tun, wenn Sie Ihr Linux/Mac MySQL-Passwort ve...

So installieren Sie eine MySQL-Datenbank im Deepin 2014-System

Deepin 2014 herunterladen und installieren Zum He...

Zusammenfassung der grundlegenden Verwendung des $-Symbols in Linux

Linux-Version: CentOS 7 [root@azfdbdfsdf230lqdg1b...

Ein Leistungsfehler bei MySQL-Partitionstabellen

Inhaltsverzeichnis 2. Stapelanalyse mit pt-pmap 3...

Lassen Sie uns über den Unterschied zwischen MyISAM und InnoDB sprechen

Die Hauptunterschiede sind folgende: 1. MySQL ver...

Tipps zur Optimierung von CSS-Schattenanimationen

Diese Technik stammt aus diesem Artikel - So anim...