使array.map返回特定的类型签名

时间:2019-09-25 11:58:01

标签: 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]>

编辑1: 感谢@Titian Cernicova-Dragomir,我发现了当前的Typescript实际上没有显示该错误-而是3.1.1。会。

1 个答案:

答案 0 :(得分:2)

从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()));

Play