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:
Đâ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'
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 .
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/…
Đườ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
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ì đó
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 đó.