如何告诉 TypeScript 我正在返回输入类型数组的数组?

How to tell TypeScript that I'm returning an array of arrays of the input type?

我有一个分块数组的函数:

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;

我希望我的 linter 知道对于给定的输入数组,输出数组是什么样的。例如

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

我的 linter 现在应该 chunkedArrays 是一个数字数组。目前它说它是任意数组的数组。

我怎样才能做到这一点?

您需要为您的函数添加泛型类型参数。 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[][]