TypeScript'te çoklu türlerle dizi tanımlama


Yanıtlar:


313

TypeScript'te çoklu türlerle dizi tanımlama

Sendika türü bir (string|number)[]demo kullanın :

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

Formun bir dizi var: [1, "message"].

Her zaman yalnızca iki öğe olduğundan eminseniz, [number, string]bunu bir demet olarak bildirebilirsiniz:

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

2
Bunun TS v1.4 +
Brocco

6
... ve türlerden yalnızca birinde bulunan bir özelliğe erişmek istediğinizde, farklı özelliklere sahip karmaşık türlerle çalışmaz.
Nadine

1
@Nadine Ve bu durumda ne yapılabilir?
msanford

4
Hangi tür olduğu konusunda net olduğunuzda, bir tür iddiası yapabilirsiniz. Sonra özelliklere erişmek için çalışacaktır.
Nadine

78

Bir demet gibi davranıyorsanız ( dil spesifikasyonunun 3.3.3 bölümüne bakın ), o zaman:

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

veya

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

10
İPUCU: Tercih ederimtype NumberStringTuple = [number, string]
basarat

1
Teşekkürler! Tamamen bunu arıyordum:const W3COLORS: [[string, string, number, number]] = [ ["aliceblue", "#f0f8ff", 240, 248, 255], ... ];
CoderPi

1
Not - her iki tür de dizide OLMALIDIR (boş bir dizi için de çalışmaz). Kabul edilen cevap daha çok yönlüdür ve kişisel olarak her zaman kullanıyorum, ancak bu ihtiyaçlara bağlıdır.
Druvis Cukurs

27

TS tüysüzüm diğer çözümlerden şikayet ediyordu, bu yüzden benim için çalışan çözüm:

item: Array<Type1 | Type2>

sadece bir tür varsa, kullanmak iyidir:

item: Type1[]

Bu harika, ama şimdi dizi üzerinde dönüyorsak, geçerli dizinin hangi tür olduğunu nasıl anlayabiliriz?
thouliha



4

Bu sürümü kullanıyorum:

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

Diğer önerilere biraz benziyor ama yine de kolay ve hatırlanması oldukça iyi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.