在打字稿中考虑这两个简单的功能:
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。会。
答案 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()));