【问题标题】:How to tell TypeScript that I'm returning an array of arrays of the input type?如何告诉 TypeScript 我正在返回一个输入类型的数组?
【发布时间】:2019-04-11 16:56:34
【问题描述】:

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

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 是一个数字数组。目前它说它是任意数组的数组。

我怎样才能做到这一点?

【问题讨论】:

  • 可以为函数返回值(inputArray: any[], chunks: number): number[][] =&gt; {...}添加类型签名

标签: arrays typescript types typescript-typings typescript-types


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2020-10-04
    • 1970-01-01
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2019-02-03
    • 2021-05-28
    • 2021-08-16
    • 1970-01-01
    相关资源
    最近更新 更多