类型'number'不能分配给'ReadonlyArray'类型

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

完整打字稿错误:

类型'(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; }

关于如何在这里修正类型的想法?

javascript typescript ramda.js
1个回答
3
投票

我对Ramda并不熟悉,但是阅读文档,看起来这样可行:

enter image description here

但看起来你真正想要使用的是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);
© www.soinside.com 2019 - 2024. All rights reserved.