angular - angular/ramda mapAccum中的打字稿错误,使用对象数组
问题描述
我正在努力让 ramda
在 angular 6 / typescript 环境中工作。
"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:任何;y:任何;}[]' 不可分配给类型 '[any, {}]'。
类型'{ x: any; 中缺少属性'0';y:任何;}[]'。
如何解决这个问题?
我已经尝试了几种泛型类型声明,但它们都失败了。
为什么是
类型'{ x: any; 中缺少属性'0';y:任何;}[]'。?
我是打字稿的新手。
是否可以将接口与类型声明一起使用?
interface IPoint {
x: number;
y: number;
};
这似乎需要在某些时候使用“新”生成的对象,对吧?
但我想一开始就让它更基本。
提前致谢!
解决方案
您必须使您的功能能够应对彼此的签名。
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), {}];
推荐阅读
- python - 当我有唯一列表时如何停止该功能?
- dart - 当用户点击任何一天时,如何在日历天数下显示值
- jquery - 如何在输入时从远程服务器动态加载并显示给用户
- python - 他们是使用第一列作为索引将单个二维数组拆分为多个不同形状的一维数组的方法吗?
- python - 如何训练具有预测值的 keras 模型?
- javascript - 循环遍历一个对象,并从另一个对象设置其值
- elasticsearch - 如何保护弹性搜索 API
- python - 根据项目类型在python中解析json嵌套的dict项目
- mysql - MYSQL 错误:更新查询中的列不能为空
- python-3.x - 如何在 Tkinter,Python 3 中为正方形指定随机方向