Was bedeutet die Pipe (|) im Typoskript?


84

Beim Durchsuchen eines Typoskriptcodes von habe @ng-bootstrapich den |Operator pipe ( ) gefunden.

export declare const NGB_PRECOMPILE: (typeof NgbAlert | typeof NgbTooltipWindow)[];

Was ist die Verwendung des Pipe ( |) - Operators in Typoskript?

Antworten:


103

Dies wird als Union - Typ in Typoskript.

Ein Vereinigungstyp beschreibt einen Wert, der einer von mehreren Typen sein kann.

Pipe ( |) wird verwendet, um jeden Typ zu trennen. Dies ist beispielsweise number | string | booleander Typ eines Werts, der a number, a stringoder a sein kann boolean.

let something: number | string | boolean;

something = 1; // ok
something = '1'; // ok
something = true; // ok
something = {}; // Error: Type '{}' is not assignable to type 'string | number | boolean'

Spielplatz


Und hier ist ein Beispiel ähnlich dem in der Frage:

class Test1 {
    public a: string
}

class Test2 {
    public b: string
}

class Test3 {
}

let x: (typeof Test1 | typeof Test2)[];

x = [Test1]; //ok
x = [Test1, Test2]; //ok
x = [Test3]; //compilation error

xist ein Array, das Konstruktoren von Test1 oder enthält Test2 .


Woher somethingweiß ich also, welchen bestimmten Objekttyp es derzeit enthält? Ich wünschte, diese Antwort hätte versucht, dies auch zu beantworten.
— Nawaz

1
@Nawaz können Sie Typschutz verwenden. Bei Grundelementen kann dies typeofbei Klassen der Fall sein instanceof. Oder es kann ein benutzerdefinierter Typschutz sein. Kommt auf den Einzelfall an. Weitere Infos hier typescriptlang.org/docs/handbook/…
— Aleksey L.

18

Die Pipe steht für 'oder'. In diesem Zusammenhang heißt es also, dass jeder der deklarierten Typen zulässig ist. Vielleicht ist es leicht, eine Vereinigung mit primitiven Typen zu verstehen:

let x: (string | number);

x = 1; //ok
x = 'myString'; //ok
x = true; //compilation error for a boolean

10
In der JS-Doppelpipeline ist ein logisches ODER, die Einzelpipeline ein bitweiser Operator ODER.
— Kirill

2
Außerdem scheint es nur mit Grundelementen zu funktionieren, denn thing: One | Twowenn beide Typen eine Schnittstelle mit unterschiedlichen Eigenschaften sind, werden sie zusammengeführt (vereinigt?) Und es wird beanstandet, dass keine der beiden Eigenschaften übereinstimmen. Das funktioniert nicht mit boolean
— Grundelementen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.