首页 > 解决方案 > 使 array.map 返回特定的类型签名

问题描述

考虑typescript中的这两个简单函数:

function produce(): Array<[number, number]> {
  return [[0, 1], [2, 3]];
}

function transform(input: Array<[number, number]>): Array<[number, number]> {
  return input.map(xy => [xy[0] + 1, xy[1] + 1]);
}

console.log(transform(produce()));

transform将一个完全相同的二维整数数组数组映射到另一个数组。TypeScript 编译器说:

Type 'number[]' is not assignable to type '[number, number]'.
    Property '0' is missing in type 'number[]'.

我是否必须将函数的签名更改为number[][](因此意外打开一个或多维数组的大门)或使用接口,或者我可以以某种方式将映射函数的返回类型定义为精确Array<[number, number]>

Edit1:感谢@Titian Cernicova-Dragomir,我发现,当前的 Typescript 实际上并没有显示该错误 - 但 3.1.1。做。

标签: typescript

解决方案


自 3.1 以来,这种情况下的推理似乎有所改进。最简单的解决方案是明确返回类型:

function produce(): Array<[number, number]> {
  return [[0, 1], [2, 3]];
}

function transform(input: Array<[number, number]>): Array<[number, number]> {
  return input.map((xy): [number, number] => [xy[0] + 1, xy[1] + 1]);
}

console.log(transform(produce()));


推荐阅读