Dấu ngoặc (|) có nghĩa là gì trong bảng chữ?


84

Trong khi duyệt một số mã typecript của @ng-bootstraptôi đã tìm thấy |toán tử pipe ( ).

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

Việc sử dụng |toán tử pipe ( ) trong bảng chữ là gì?

Câu trả lời:


103

Đây được gọi là kiểu liên hợp trong bảng chữ.

Kiểu liên hợp mô tả một giá trị có thể là một trong nhiều kiểu.

Pipe ( |) được sử dụng để phân tách từng kiểu, vì vậy, ví dụ như number | string | booleankiểu của một giá trị có thể là a number, a stringhoặc a 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'

Sân chơi


Và đây là một ví dụ tương tự như một trong câu hỏi:

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

xlà một mảng chứa các hàm tạo của Test1 hoặc Test2 .


Vì vậy something, làm thế nào để biết loại đối tượng cụ thể mà nó hiện đang giữ? Tôi ước câu trả lời này cũng cố gắng trả lời điều đó.
— Nawaz

1
@Nawaz bạn có thể sử dụng bảo vệ loại. Trong trường hợp nguyên thủy, nó có thể là typeof, trong trường hợp các lớp instanceof. Hoặc nó có thể là kiểu bảo vệ do người dùng xác định. Phụ thuộc vào trường hợp cụ thể. Thông tin thêm tại đây stylescriptlang.org/docs/handbook/…
— Aleksey L.

18

Đường ống đại diện cho 'hoặc'. Vì vậy, trong ngữ cảnh này, nó nói rằng một trong hai kiểu đã khai báo được phép. Có lẽ dễ hiểu về một hợp nhất với các kiểu nguyên thủy:

let x: (string | number);

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

10
trong JS đường ống kép là OR logic, đường ống đơn là toán tử OR theo bitwise.
— Kirill

2
Ngoài ra, nó dường như chỉ hoạt động với các nguyên thủy, bởi vì thing: One | Two cả hai kiểu đều là một giao diện với các thuộc tính khác nhau, nó sẽ hợp nhất (hợp nhất?) Chúng và phàn nàn rằng cả hai kiểu đều không khớp với các thuộc tính eachothers. Điều đó sẽ không hoạt động với nguyên thủy, bởi vì tôi không thể hợp nhất một đối tượng với booleanhoặc một cái gì đó
— TrySpace
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.