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

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

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

Ответы [ 3 ]

2 голосов
/ 15 января 2020

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

Пример:

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

Здесь можно увидеть пример стекаблика.

1 голос
/ 15 января 2020

Поскольку мы работаем с системой типа stati c, более правильным способом было бы указать что-то большее, чем any. Рассмотрим такую ​​безопасную версию типа:

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.

0 голосов
/ 15 января 2020

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...