Definindo matriz com vários tipos no TypeScript


Respostas:


313

Definindo matriz com vários tipos no TypeScript

Use uma (string|number)[]demonstração do tipo união :

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

Eu tenho uma matriz do formulário: [1, "message"].

Se você tiver certeza de que sempre existem apenas dois elementos [number, string], poderá declará-lo como uma tupla:

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

2
Apenas uma observação de que isso exigirá TS v1.4 +
Brocco

6
... e não funcionará com tipos complexos com propriedades diferentes, quando você desejar acessar uma propriedade disponível em apenas um dos tipos.
Nadine

1
@ Nadine E, nesse caso, o que se poderia fazer?
precisa saber é

4
Sempre que tiver certeza sobre qual é o tipo, você pode fazer uma asserção de tipo. Em seguida, ele trabalhará para acessar as propriedades.
Nadine

78

Se você o estiver tratando como uma tupla (consulte a seção 3.3.3 da especificação do idioma ), então:

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

ou

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

10
DICA: eu prefeririatype NumberStringTuple = [number, string]
basarat

1
Obrigado! Eu estava totalmente procurando por isso:const W3COLORS: [[string, string, number, number]] = [ ["aliceblue", "#f0f8ff", 240, 248, 255], ... ];
CoderPi

1
Nota - ambos os tipos devem estar na matriz (não funciona para uma matriz vazia também). A resposta aceita é mais versátil e que eu sempre uso pessoalmente, mas depende das necessidades.
Druvis Cukurs 17/04/19

27

Meu fiapo TS estava reclamando de outras soluções, então a solução que estava funcionando para mim era:

item: Array<Type1 | Type2>

se houver apenas um tipo, é bom usar:

item: Type1[]

Isso é ótimo, mas digamos que se estamos fazendo um loop sobre a matriz agora, como podemos descobrir qual o tipo da matriz atual?
thouliha



4

Estou usando esta versão:

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

É um pouco semelhante às outras sugestões, mas ainda é fácil e muito bom de lembrar.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.