Xác định mảng với nhiều loại trong TypeScript


184

Tôi có một mảng của mẫu : [ 1, "message" ].

Làm thế nào tôi có thể định nghĩa điều này trong TypeScript?


Câu hỏi tương tự như thế này, không có câu trả lời, nhưng điều này thời gian sử dụng lớp kế thừa với số không rõ các mục và tất cả các mở rộng cùng lớp: stackoverflow.com/questions/50322488/...
cancerbero

Câu trả lời:


312

Xác định mảng với nhiều loại trong TypeScript

Sử dụng (string|number)[]bản demo loại liên minh :

const foo: (string|number)[] = [ 1, "message" ];

Tôi có một mảng có dạng: [1, "message"].

Nếu bạn chắc chắn rằng luôn có hai phần tử [number, string]thì bạn có thể khai báo nó dưới dạng một tuple:

const foo: [number, string] = [ 1, "message" ];

2
Chỉ cần lưu ý rằng điều này sẽ yêu cầu TS v1.4 +
Brocco

6
... và nó sẽ không hoạt động với các loại phức tạp với các thuộc tính khác nhau, khi bạn muốn truy cập một thuộc tính có sẵn trên một trong các loại.
Nadine

1
@Nadine Và trong trường hợp đó, người ta có thể làm gì?
msanford

4
Mỗi khi bạn rõ ràng về loại đó là gì, bạn có thể thực hiện một xác nhận loại. Sau đó, nó sẽ làm việc để truy cập các thuộc tính.
Nadine

78

Nếu bạn đang coi nó là một tuple (xem phần 3.3.3 của thông số ngôn ngữ ), thì:

var t:[number, string] = [1, "message"]

hoặc là

interface NumberStringTuple extends Array<string|number>{0:number; 1:string}
var t:NumberStringTuple = [1, "message"];

10
type NumberStringTuple = [number, string]
MIPO

1
Cảm ơn! Tôi đã hoàn toàn tìm kiếm điều này:const W3COLORS: [[string, string, number, number]] = [ ["aliceblue", "#f0f8ff", 240, 248, 255], ... ];
CoderPi

1
Lưu ý - cả hai loại PHẢI nằm trong mảng (cũng không hoạt động đối với một mảng trống). Câu trả lời được chấp nhận là linh hoạt hơn và cá nhân tôi luôn luôn sử dụng, nhưng nó phụ thuộc vào nhu cầu.
Druvis Cukurs

27

TS lint của tôi đã phàn nàn về các giải pháp khác, vì vậy giải pháp phù hợp với tôi là:

item: Array<Type1 | Type2>

nếu chỉ có một loại, bạn có thể sử dụng:

item: Type1[]

Điều này thật tuyệt, nhưng nói rằng nếu bây giờ chúng ta đang lặp lại mảng đó, làm thế nào để chúng ta tìm ra loại mảng hiện tại là gì?
thouliha



4

Tôi đang sử dụng phiên bản này:

exampleArr: Array<{ id: number, msg: string}> = [
   { id: 1, msg: 'message'},
   { id: 2, msg: 'message2'}
 ]

Nó hơi giống với các gợi ý khác nhưng vẫn dễ nhớ và khá tốt để nhớ.

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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.