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.