Как сказать TypeScript, что я возвращаю массив массивов входного типа? - PullRequest
0 голосов
/ 08 ноября 2018

У меня есть функция, которая разбивает массивы:

const chunkArray = (inputArray: any[], chunks: number) => {
  const chunkedArray = [];
  let i = 0;
  const n = inputArray.length;

  while (i < n) {
    chunkedArray.push(inputArray.slice(i, (i += chunks)));
  }

  return chunkedArray;
};

export default chunkArray;

Я бы хотел, чтобы мой линтер знал для данного входного массива, как выглядит выходной массив. Например для

const chunkedArrays = chunkArray([1, 2, 3, 4, 5], 2); // [[1, 2], [3, 4], [5]]

мой линтер должен теперь, что chunkedArrays - это массив массивов чисел. В настоящее время он говорит, что это массив любых массивов.

Как мне этого добиться?

1 Ответ

0 голосов
/ 08 ноября 2018

Вам необходимо добавить параметр универсального типа в вашу функцию. Параметр type фиксирует фактический тип элементов во входном массиве, и затем вы можете использовать этот универсальный тип, чтобы указать, как он соотносится с вашим результатом:

const chunkArray = <T>(inputArray: T[], chunks: number) => {
    const chunkedArray: T[][] = []; // use T as the type for chunkedArray
    let i = 0;
    const n = inputArray.length;

    while (i < n) {
        chunkedArray.push(inputArray.slice(i, (i += chunks)));
    }

    return chunkedArray;
};

const chunkedArrays = chunkArray([1, 2, 3, 4, 5], 2); // number[][]
const chunkedArraysString = chunkArray(["1", "2", "3", "4", "5"], 2); // string[][]
...