Definiowanie tablicy z wieloma typami w TypeScript


Odpowiedzi:


313

Definiowanie tablicy z wieloma typami w TypeScript

Użyj (string|number)[]demo typu Union :

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

Mam tablicę w postaci: [1, "wiadomość"].

Jeśli masz pewność, że zawsze są tylko dwa elementy [number, string], możesz zadeklarować je jako krotkę:

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

2
Tylko uwaga, że ​​będzie to wymagało TS v1.4 +
Brocco

6
... i nie będzie działać ze złożonymi typami o różnych właściwościach, gdy chcesz uzyskać dostęp do właściwości dostępnej tylko dla jednego z typów.
Nadine

1
@Nadine A w takim razie co można by zrobić?
msanford

4
Za każdym razem, gdy masz jasność co do tego, jaki to typ, możesz wykonać potwierdzenie typu. Wtedy będzie działać, aby uzyskać dostęp do właściwości.
Nadine

78

Jeśli traktujesz to jako krotkę (patrz sekcja 3.3.3 specyfikacji języka ), to:

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

lub

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

10
WSKAZÓWKA: Wolałbymtype NumberStringTuple = [number, string]
basarat

1
Dzięki! Całkowicie tego szukałem:const W3COLORS: [[string, string, number, number]] = [ ["aliceblue", "#f0f8ff", 240, 248, 255], ... ];
CoderPi

1
Uwaga - oba typy MUSZĄ znajdować się w tablicy (nie działa również dla pustej tablicy). Przyjęta odpowiedź jest bardziej wszechstronna iz której osobiście zawsze korzystam, ale zależy to od potrzeb.
Druvis Cukurs

27

Mój szarpacz TS narzekał na inne rozwiązania, więc rozwiązanie, które działało dla mnie, to:

item: Array<Type1 | Type2>

jeśli jest tylko jeden typ, można użyć:

item: Type1[]

To świetnie, ale powiedzmy, że jeśli teraz przeglądamy tablicę, w jaki sposób możemy dowiedzieć się, jakiego typu jest bieżąca tablica?
thouliha



4

Używam tej wersji:

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

Jest trochę podobny do innych sugestii, ale nadal jest łatwy i całkiem dobry do zapamiętania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.