TypeScript-Union-Typen, Schnittmengentypen und Typwächter

TypeScript-Union-Typen, Schnittmengentypen und Typwächter

1. Union-Typ

Der sogenannte Union-Typ dient zum Definieren einiger Typen. Die definierten Variablen müssen nur einem Typ genügen. Der Union-Typ wird mit | definiert. Der Beispielcode lautet wie folgt:

// Definieren Sie den Union-Typ durch das | Symbol let value: number | boolean | string = 'Union-Typ'
Wert = 18

Im obigen Code definieren wir eine Wertvariable, die vom Typ Zahl, Boolean oder Zeichenfolge sein kann.

2. Crossover-Typ

Wir führen Vereinigungstypen ein und betrachten dann Schnittmengentypen, die den Vereinigungstypen sehr ähnlich sind.

Der sogenannte Kreuztyp muss alle Typen erfüllen und wird mit dem Symbol & definiert.

Der Beispielcode lautet wie folgt:

// Drei allgemeine Schnittstellentypen definieren Schnittstellenname {
  Name: Zeichenfolge
}
Schnittstelle Alter {
  Alter: Anzahl
}
Schnittstelle Hobby {
  Hobby: Schnur
}
//Definiere ein Objekt, das ein Vereinigungstyp der drei oben genannten Objekte ist let person: Name & Alter & Hobby = {
  // Wenn ein Typ nicht zugeordnet ist, wird eine Ausnahme ausgelöst. Name: '一碗周',
  Alter: 18,
  Hobby: 'Programmieren',
}

3. Typenschutz

Jetzt haben wir eine Anforderung: Holen Sie sich die erste Zahl in einem Array beliebigen Typs.

Der Implementierungscode lautet wie folgt:

// Definiere ein Array, das eine Zahl oder einen String enthält const arr: (Zahl | String)[] = [1, 'Zahl']
// Durchlaufe das Array und gib die erste Zahl zurück const getValue: (arr: (number | string)[]) => number = (
  arr: (Zahl | Zeichenfolge)[],
): Zahl => {
  für (sei i = 0; i < arr.length; i++) {
    // Wenn der aktuelle Wert bei der Konvertierung in eine Zahl kein NaN ist, returniere if (!isNaN(Number(arr[i]))) {
      return arr[i] // Der Typ „Zeichenfolge | Zahl“ kann nicht dem Typ „Zahl“ zugewiesen werden.
    }
  }
}


Im obigen Code ist bei return nicht bekannt, ob der zurückgegebene Wert vom Typ number ist. Es wird also eine Ausnahme ausgelöst.

Die oben genannten Funktionen können durch Typzusicherungen erreicht werden. Der Beispielcode lautet wie folgt:

const getValue: (arr: (Zahl | Zeichenfolge)[]) => Zahl = (
  arr: (Zahl | Zeichenfolge)[],
): Zahl => {
  für (sei i = 0; i < arr.length; i++) {
    // Wenn der aktuelle Wert bei der Konvertierung in eine Zahl kein NaN ist, returniere if (!isNaN(Number(arr[i]))) {
      return arr[i] as number // Sag dem Compiler, dass ich eine Zahl zurückgebe
    }
  }
}

Was ist eine Typbehauptung? Siehe: Typbehauptung

Wenn Sie zur Erklärung Typbehauptungen verwenden, wird es umständlicher, wenn der gewünschte Datentyp ein anderer ist. Derzeit ist zum Ausführen dieser Funktion ein Typschutz erforderlich.

Es gibt drei Hauptarten von Typenschutz:

3.1 Benutzerdefinierter Typschutz

Benutzerdefinierter Typschutz wird durch die Definition einer Funktion definiert, deren Rückgabestruktur die Form parameterName is type hat, wobei es sich um ein Typprädikat handelt. parameterName muss ein Parametername aus den aktuellen Funktionsparametern sein.

Der Beispielcode lautet wie folgt:

// Benutzerdefinierten Typschutz verwenden // 1. Definieren Sie eine Funktion, deren Rückgabewert ein Typprädikat ist, d. h. Parametername ist Typ, was die Form von Parametername ist Typfunktion ist Nummer (Wert: Nummer | Zeichenfolge): Wert ist Nummer { hat.
  // Wenn true zurückgegeben wird, bedeutet dies, dass der übergebene Wert der Typ nach ist
  return !isNaN(Zahl(Wert))
}
// 2. Definieren Sie eine Funktion zum Abrufen einer Zahl const getNumber: (value: number | string) => number = (
  Wert: Zahl | Zeichenfolge,
): Zahl => {
  // Wenn der Wert des Aufrufs isNumber wahr ist, bedeutet das, dass der Wert eine Zahl ist. Gib also die Zahl zurück, wenn (isNumber(value)) {
    Rückgabewert
  }
}
// 3. Aufruf zum Abrufen des endgültigen Wertes const getValue: (arr: (number | string)[]) => number = (
  arr: (Zahl | Zeichenfolge)[],
): Zahl => {
  für (sei i = 0; i < arr.length; i++) {
    // Wenn eine Zahl zurückgegeben wird, konvertieren Sie sie in den booleschen Wert true
    wenn (getNumber(arr[i]) || getNumber(arr[i]) === 0) {
      gebe Nummer zurück(arr[i])
    }
  }
}

Der Grund für die Definition der zweiten Funktion liegt darin, dass es immer noch Probleme gibt, i direkt als Rückgabewert im Array zu verwenden. Daher wird eine Funktion als Übergang definiert.

3.2Typ des Typschutzes

Das Schlüsselwort typeof in JavaScript kann den aktuellen Typ bestimmen, aber es kann nur vier Typen bestimmen: number , string , boolean und symbol .

Dies reicht für diese Anforderung aus. Als nächstes sehen wir uns an, wie der Typenschutz durch typeof implementiert wird.

Der Beispielcode lautet wie folgt:

// 1. Definieren Sie eine Funktion zum Abrufen einer Zahl const getNumber: (value: number | string) => number = (
  Wert: Zahl | Zeichenfolge,
): Zahl => {
  //Überprüfen Sie, ob der aktuelle Wert ein String ist. Wenn ja, geben Sie den aktuellen Wert zurück, wenn (Typ des Wertes === 'Zahl') {
    Rückgabewert
  }
}
// 2. Aufruf zum Abrufen des endgültigen Wertes const getValue: (arr: (number | string)[]) => number = (
  arr: (Zahl | Zeichenfolge)[],
): Zahl => {
  für (sei i = 0; i < arr.length; i++) {
    // Wenn eine Zahl zurückgegeben wird, konvertieren Sie sie in den booleschen Wert true
    wenn (getNumber(arr[i]) || getNumber(arr[i]) === 0) {
      gebe Nummer zurück(arr[i])
    }
  }
}

3.3Instanz des Typschutzes

instanceof ist ebenfalls ein nativer Operator in JavaScript . Er wird verwendet, um zu bestimmen, ob eine Instanz von einem Konstruktor oder einer Klasse mit ES6-Syntax erstellt wird. In TypeScript kann Typschutz auch durch instanceof erreicht werden.

Der Beispielcode lautet wie folgt:

/**
 * Da instanceof nur Referenztypen und keine primitiven Typen unterstützt, müssen wir hier einige Änderungen vornehmen und das Array wie folgt ändern:
 */
const arr2: (Zahl | Zeichenfolge)[] = [neue Zeichenfolge('Zahlenwert'), neue Zahl(10)]
// 1. Definieren Sie eine Funktion zum Abrufen einer Zahl const getNumber: (Wert) => Zahl = (Wert): Zahl => {
  //Bestimmen Sie, ob der aktuelle Wert vom Typ „Zahl“ ist, konvertieren Sie den aktuellen Wert in einen String und geben Sie zurück, wenn (Wertinstanz von „Zahl“) {
    gibt Zahl(Wert) zurück
  }
}
// 2. Aufruf zum Abrufen des endgültigen Wertes const getValue: (arr: (Number | String)[]) => number = (
  arr: (Zahl | Zeichenfolge)[],
): Zahl => {
  für (sei i = 0; i < arr.length; i++) {
    // Wenn eine Zahl zurückgegeben wird, konvertieren Sie sie in den booleschen Wert true
    wenn (getNumber(arr[i]) || getNumber(arr[i]) === 0) {
      gebe Nummer zurück(arr[i])
    }
  }
}


Bei der Verwendung von instanceof sind zwei Punkte zu beachten:

  • Gilt nur für beliebige Referenztypen, nicht für primitive Typen.
  • Ob die Prototypkette des ersteren das Prototypobjekt des letzteren enthält.

Damit ist dieser Artikel zu TypeScript-Union-Typen, Schnittmengentypen und Typschutz abgeschlossen. Weitere Informationen zu TypeScript-Union-Typen, Schnittmengentypen und Typschutz finden Sie in früheren Artikeln auf 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:
  • TypeScript-Union-Typen, Schnittmengentypen und Typwächter
  • Detaillierte Erklärung der markierten Union-Typen in TypeScript 2.0
  • Eine kurze Diskussion über den Typschutzmechanismus von TypeScript

<<:  Grundlegende Verwendung von @Font-face und wie man es mit allen Browsern kompatibel macht

>>:  Verwenden Sie HTML, um eine einfache E-Mail-Vorlage zu schreiben

Artikel empfehlen

MySQL verwendet ein Limit, um die Beispielmethode für Paging zu implementieren

1. Grundlegende Implementierung des Limits Im All...

Detaillierte Erklärung der Verwendung des Bash-Befehls

Unter Linux wird Bash als Standard übernommen, wa...

Detaillierte Erklärung des Responsive-Prinzips von Vue3

Inhaltsverzeichnis Überprüfung der responsiven Pr...

Rankings zur Benutzerfreundlichkeit chinesischer Websites

<br />Die Benutzererfahrung wird von chinesi...

So verwenden Sie Nginx, um domänenübergreifende Front-End-Probleme zu lösen

Vorwort Bei der Entwicklung statischer Seiten, wi...

Detaillierte Erklärung zur Verwendung der Vue-Nummernschild-Eingabekomponente

Eine einfache Nummernschild-Eingabekomponente (vu...