angular / ramda mapAccum中的Typescript错误,使用对象数组

问题描述 投票:1回答:1

我正努力让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; y:任何; } []”。

怎么解决这个问题? 我已经尝试了几种泛型类型声明,但它们都无法正常工作。 为什么是

属性'{x:any; y:任何; } []”。 ?

我是打字稿的新手。 是否可以使用接口和类型声明?

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

这似乎需要在某些时候用“new”生成的对象,对吧? 但我想首先让它更基本。 提前致谢!

angular typescript ramda.js
1个回答
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), {}];
© www.soinside.com 2019 - 2024. All rights reserved.