Я объявляю функцию в машинописи, которая возвращает вложенный массив, но я не уверен, как объявить возвращаемый тип и объявить возвращаемый массив. Кто-нибудь может помочь? Вот что у меня
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][]
}