Подтвердить что ты не робот

Определение массива с несколькими типами в TypeScript

У меня есть массив вида: [ 1, "message" ].

Как бы я определить это в TypeScript?

4b9b3361

Ответ 1

Определение массива с несколькими типами в TypeScript

Используйте тип объединения (string|number)[] demo:

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

У меня есть массив вида: [1, "сообщение"].

Если вы уверены, что всегда есть только два элемента [number, string] вы можете объявить его как кортеж:

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

Ответ 2

Если вы рассматриваете его как кортеж (см. Раздел 3.3.3 спецификации языка), то:

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

или же

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

Ответ 3

Мой TS TS жаловался на другие решения, поэтому решение, которое работало для меня, было:

item: Array<Type1 | Type2>

если есть только один тип, его можно использовать:

item: Type1[]

Ответ 4

Я использую эту версию:

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

Это немного похоже на другие предложения, но все же легко и довольно хорошо запомнить.

Ответ 5

Я остановился на следующем формате для ввода массивов, которые могут иметь элементы нескольких типов.

Array<ItemType1 | ItemType2 | ItemType3>

Это хорошо работает с тестированием и защитой типа. https://www.typescriptlang.org/docs/handbook/advanced-types.html#type-guards-and-differentiating-types

Этот формат плохо работает с тестированием или защитой типа:

(ItemType1 | ItemType2 | ItemType3)[]

Ответ 6

Используйте Array<any> и наслаждайтесь!