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.