使用对象数组的angular / ramda mapAccum中的打字稿错误

时间:2018-08-13 13:18:15

标签: angular typescript ramda.js

我正在努力使ramda在6 /脚本环境中工作。

"ramda": "^0.25.0",
"@types/ramda": "^0.25.24"

这就是我的开始方式。

 const addP = (p1,p2) => ({ x: p1.x+p2.x,y: p1.y+p2.y });
 const accum = (a,b) => [addP(a,b),addP(a,b)];
 console.log(
   JSON.stringify(
     R.mapAccum(
       accum,
       {x:0,y:0},
       [{x:10,y:10},{x:100,y:100},{x:200,y:200}]
     ),
   null,2);

给出:

  

错误TS2345:
  类型'(a:any,b:any)=> {x:any; y:任何; } []'
  不可分配给类型为
的参数   '(acc:any,value:any)=> [any,{}]'。
  输入'{x:any; y:任何; } []'不能分配给类型'[any,{}]'。
  类型'{x:any;缺少属性'0'。 y:任何; } []'。

如何解决?
我尝试了几种通用类型声明,但它们都无法正常工作。
为什么是

  

类型'{x:any;中缺少属性'0'。 y:任何; } []'。 ?

我对打字稿还是陌生的。

是否可以将接口与类型声明一起使用?

interface IPoint {
   x: number;                                                                                                
   y: number;                                                                                                
};

这似乎需要在某个时候使用“ new”生成的对象,对吧?
但我想首先让它更基础。

预先感谢!

1 个答案:

答案 0 :(得分:1)

您必须使您的功能相互应对。

const addP = (p1,p2) => ({ x: p1.x+p2.x,y: p1.y+p2.y });
const accum = (a,b) => [addP(a,b),addP(a,b)];

签名是

addP(param1, param2): {x: number, y: number }
accum(param1, param2): [{x: number, y: number }, {x: number, y: number }]

您的错误指出了

  

'(a:any,b:any)=> {x:any; y:任何; } []'   不能分配给类型的参数   '(acc:any,value:any)=> [any,{}]'。

这意味着您应该返回

的内容
accum(param1, param2): [{x: number, y: number }, {}]

所以尝试

const accum = (a,b) => [addP(a,b), {}];