Definición de matriz con múltiples tipos en TypeScript


Respuestas:


313

Definición de matriz con múltiples tipos en TypeScript

Use una (string|number)[]demostración tipo unión :

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

Tengo una matriz de la forma: [1, "mensaje"].

Si está seguro de que siempre hay solo dos elementos [number, string], puede declararlo como una tupla:

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

2
Solo una nota de que esto requerirá TS v1.4 +
— Brocco

66
... y no funcionará con tipos complejos con diferentes propiedades, cuando desee acceder a una propiedad disponible solo en uno de los tipos.
— Nadine

1
@ Nadine Y en ese caso, ¿qué se puede hacer?
— msanford

44
Cada vez que tenga claro qué tipo es, puede hacer una aserción de tipo. Entonces funcionará para acceder a las propiedades.
— Nadine

78

Si lo está tratando como una tupla (consulte la sección 3.3.3 de las especificaciones del lenguaje ), entonces:

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

o

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

10
CONSEJO: Preferiríatype NumberStringTuple = [number, string]
— basarat

1
¡Gracias! Estaba totalmente buscando esto:const W3COLORS: [[string, string, number, number]] = [ ["aliceblue", "#f0f8ff", 240, 248, 255], ... ];
— CoderPi

1
Nota: ambos tipos DEBEN estar en la matriz (tampoco funciona para una matriz vacía). La respuesta aceptada es más versátil y personalmente la uso siempre, pero depende de las necesidades.
— Druvis Cukurs

27

Mi pelusa TS se quejaba de otras soluciones, por lo que la solución que me funcionaba era:

item: Array<Type1 | Type2>

si solo hay un tipo, está bien usarlo:

item: Type1[]

Esto es genial, pero digamos que si estamos recorriendo la matriz ahora, ¿cómo podemos determinar de qué tipo es la matriz actual?
— thouliha



4

Estoy usando esta versión:

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

Es un poco similar a las otras sugerencias, pero aún así es fácil y bastante bueno para recordar.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.