在typescript中,管道(|)是什么意思?

在typescript中,管道(|)是什么意思?,typescript,Typescript,在浏览@ng bootstrap的某些类型脚本代码时,我找到了pipe(|)操作符 export declare const NGB_PRECOMPILE: (typeof NgbAlert | typeof NgbTooltipWindow)[]; pipe(|)操作符在typescript中的用途是什么?这在typescript中被称为 联合类型描述的值可以是多种类型之一 管道(|)用于分隔每种类型,因此,例如数字|字符串|布尔值是值的类型,可以是数字、字符串或布尔值 let someth

在浏览
@ng bootstrap
的某些类型脚本代码时,我找到了pipe(
|
)操作符

export declare const NGB_PRECOMPILE: (typeof NgbAlert | typeof NgbTooltipWindow)[];
pipe(
|
)操作符在typescript中的用途是什么?

这在typescript中被称为

联合类型描述的值可以是多种类型之一

管道(
|
)用于分隔每种类型,因此,例如
数字|字符串|布尔值
是值的类型,可以是
数字
、字符串或
布尔值

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'


下面是一个类似于问题中的例子:

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

x
是一个数组,其中包含管道表示“或”的
Test1
Test2
的构造函数。因此,在本文中,它表示允许声明的任何一种类型。可能很容易理解具有基元类型的并集:

let x: (string | number);

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

在JS中,双管道是逻辑OR,单管道是位运算符OR。此外,它似乎只适用于原语,因为当两种类型都是具有不同属性的接口时,它会合并(并集)它们,并抱怨它们的属性都不匹配。这对原语不起作用,因为我不能将一个对象与
布尔值
或其他东西合并。因此,给定
某物
,我如何知道它当前持有哪种特定类型的对象?我希望这个答案也能回答这个问题。@Nawaz你可以使用类型保护。对于原语,它可以是
typeof
,对于类
instanceof
。也可以是用户定义的类型guard。视具体情况而定。这里的更多信息看起来工会手册链接现在已被弃用,而“转到新页面”按钮在任何地方都没有用处。你可能想把它改成