Typescript: объявить функцию, которая возвращает вложенный массив

Я объявляю функцию в машинописи, которая возвращает вложенный массив, но я не уверен, как объявить возвращаемый тип и объявить возвращаемый массив. Кто-нибудь может помочь? Вот что у меня

myFunction(items: any): [] {
  const data = [];
  for (const item of items) {
    data.push([item.parameter1, item.parameter2])
  }
  return data; // IDE throws error here
}

Всего 3 ответа


Вы можете использовать myFunction(): any[][] :

Пример:

myFunction(): any[][] {
    let data = [,];
    data = [[1], [2], [3]];
    console.log(data);
    return data; 
}

Пример стекаблица можно увидеть здесь.


Поскольку мы работаем со статической системой типов, более правильным способом было бы указать что-то большее, чем что-либо другое. Рассмотрим такой тип безопасной версии:

type Item = {
    parameter1: any; // here better some type 
    parameter2: any; // here better some type 
}

type ParametersTupleArr = [Item['parameter1'], Item['parameter2']][]; // return type
function myFunction(items: Item[]): ParametersTupleArr {
  const data = [] as ParametersTupleArr;
  for (const item of items) {
    data.push([item.parameter1, item.parameter2])
  }
  return data;
}

Тип [Item['parameter1'], Item['parameter2']][] говорит, что мы выведем массив из двухэлементных кортежей с типами параметров Item .


Вот решение, если требуется безопасность типов:

interface Item<P1, P2> {
  parameter1: P1; 
  parameter2: P2; 
}

function myFunction<P1, P2>(items: Item<P1,P2>[]) {

  const data: [Item<P1, P2>['parameter1'], Item<P1, P2>['parameter2']][] = [];

  for (const item of items) {
    data.push([item.parameter1, item.parameter2])
  }

  return data; // returns [P1, P2][]

}

Playground Link


Есть идеи?

10000