完整打字稿错误:
类型'(c:IAsset)=> number'的参数不能分配给'(n:IAsset)=> ReadonlyArray <{}>'类型的参数。类型'number'不能分配给'ReadonlyArray <{}>'。
我的calculatePercentage
功能:
// Add coin's percentage of portfolio
export const calculatePercentage = (portfolio: IAsset[], coin: IAsset) => {
if (coin) {
portfolio.push(coin);
}
const addValue = (c: IAsset) => c.value;
const values = R.chain(addValue, portfolio);
const total = values.reduce((acc: number, val: number) => acc + val);
const updatedPortfolio = portfolio.map((c) => {
c.percentage = round((c.value / total) * 100);
return c;
});
return updatedPortfolio;
};
随着addValue
我接受了一种IAsset
并且只是返回它的价值(number
);
在R.chain(addValue, portfolio)
中,addValue
函数用于portfolio
中qzexswpoi类型的每个项目。
我的界面:
IAsset
export interface IAsset {
currency: string;
exchange: string;
marketCap: number;
name: string;
percentage: number;
price: number;
position: number;
value: number;
}
关于如何在这里修正类型的想法?
我对Ramda并不熟悉,但是阅读文档,看起来这样可行:
但看起来你真正想要使用的是const addValue = (c: IAsset) => [c.value];
const values = R.chain(addValue, portfolio);
map
这相当于内置的const addValue = (c: IAsset) => c.value;
const values = R.map(addValue, portfolio);
功能:
map
但你也可以使用const addValue = (c: IAsset) => c.value;
const values = portfolio.map(addValue);
来获得总数而不需要中间步骤来获得reduce
:
values
我想Ramda风格的版本将是这样的:
const total = portfolio.reduce((acc: number, { value }: IAsset) => acc + value, 0);