Drei (ein) ts-Nicht-Basistypen (Typaliase, Schnittmengen- und Vereinigungstypen)

Typ

Lassen Sie uns zunächst typedas Schlüsselwort einführen, das einen Typalias darstellt, was bedeutet, dass wir einen Typ anpassen können.
Im Folgenden definieren wir eine Variable, die entweder eine Zahl oder ein String sein kann

// |为联合类型,下面马上说到
type sn = string | number
let sval:sn = '1'
let nval:sn = 1

Gewerkschaftstyp

Manchmal sind wir uns über den spezifischen Typ einer Variablen nicht sicher. Es kann sich um eine Zeichenfolge, eine Zahl oder sogar um eine undefinierte Variable handeln. In diesem Fall können wir Union-Typen verwenden, um Typen zu definieren.

//定义一个可能为字符串,数字,或者undefined的类型
type nsu = number | string | undefined
let nval:nsu = 1
let sval:nsu = '1'
let uval:nsu = undefined
let bval:nsu = false  //Type 'false' is not assignable to type 'nsu'.

Es kann auch auf bestimmte Werte begrenzt werden

type xdV = '1' | '2' | '3'
let sdv1:xdV = '1'
let sdv2:xdV = '2'
let sdv3:xdV = '3'
let sdv4:xdV = 1

Nach dem Zusammenführen komplexer Typen müssen wir häufig den Umfang ihrer Verwendung einschränken (der folgende Code verwendet interfaceSchnittstellen, und die Schnittstelle ist ein Durchgangszug ) .

interface A {
    
    
    name: string
}
interface B {
    
    
    age: string,
    name: string
}
type AB = A | B

function demo(ab: AB):void {
    
    
    console.log(ab.age)  //报错
}

In der Funktion haben wir den formalen Parameter als Unionstyp AB definiert, sind uns aber nicht sicher, ob es A oder B ist, daher ist es falsch, das Altersattribut direkt darin zu verwenden. Ich muss im Voraus wissen, ob es einen gibt Altersattribut, bevor Sie es verwenden.

function demo(ab: AB):void {
    
    
    if ('age' in ab) {
    
    
     console.log(ab.age)
    }
}

Der Operator „in“ wird verwendet, um zu prüfen, ob ein Objekt eine bestimmte Eigenschaft hat

Crossover-Typ

Kreuztypisierung ist eine syntaktische Form, mit der mehrere Typen zu einem einzigen Typ kombiniert werden. Verwenden Sie Schnittmengentypen, um einer Variablen gleichzeitig Attribute mehrerer Typen zuzuweisen.

Im Folgenden definieren wir eine Schnittstelle für das Erscheinungsbild des Mobiltelefons und eine Schnittstelle für den Preis und das Modell des Mobiltelefons. Wir führen diese beiden Schnittstellen mithilfe von Schnittpunkttypen zusammen.

interface Appearance {
    
    
    color: string,
    thickness: number
}

interface Other {
    
    
    price: number,
    brand: string
}
type Phone = Appearance & Other

let p1:Phone = {
    
    
    color: 'red',
    thickness: 10,
    price: 1999,
    brand: 'xiaomi'
}

Da es sich um einen Zusammenführungsvorgang handelt, werden Sie mit Sicherheit auf eine Duplizierung von Attributen stoßen.

1. Grundlegende Typzusammenführung

interface A {
    
    
  name: string;
  age: number;
  gender: string;
}

interface B {
    
    
  name: string;
  address: string;
  gender: boolean;
}

type C = A & B;
const person: C = {
    
    
  name: "John",
  age: 30,
  address: "123 Main St",
  gender: false //报错
};

Wir können darüber nachdenken, welche Art von Geschlecht im obigen Code enthalten ist. Gemäß der Zusammenführungslogik sollte es sowohl vom Typ „String“ als auch vom Typ „Zahl“ sein, aber ts verfügt nicht über einen solchen Typ, daher wird ihm der Typ „Nie“ zugewiesen.

2. Nicht-Basistyp-Zusammenführung
Bei der Nicht-Basistyp-Zusammenführung werden häufig alle Attribute integriert.

interface A {
    
     x: {
    
     d: boolean } }
interface B {
    
     x: {
    
     e: string } }
interface C {
    
     x: {
    
     f: number } }

type ABC = A & B & C;

let abc: ABC = {
    
    
    x: {
    
    
        d: true,
        e: 'semlinker',
        f: 666
    }
};

Supongo que te gusta

Origin blog.csdn.net/qq_44473483/article/details/134925941
Recomendado
Clasificación