gpt4 book ai didi

javascript - 类型 'number' 不可分配给类型 'ReadonlyArray<{}>'

转载 作者:搜寻专家 更新时间:2023-10-30 21:26:17 27 4
gpt4 key购买 nike

完整的 Typescript 错误:

Argument of type '(c: IAsset) => number' is not assignable to parameter of type '(n: IAsset) => ReadonlyArray<{}>'. Type 'number' is not assignable to type '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),然后在 portfolio 中的每个项目上使用 addValue 函数,类型为 IAsset .

我的界面:

export interface IAsset {
currency: string;
exchange: string;
marketCap: number;
name: string;
percentage: number;
price: number;
position: number;
value: number;
}

enter image description here

关于如何在此处更正设置类型的想法?

最佳答案

我对 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:

const total = portfolio.reduce((acc: number, { value }: IAsset) => acc + value, 0);

我想 Ramda 风格的版本应该是这样的:

var getValue = (c: IAsset) => c.value;
var adder = (a: number, b: number) => a + b;
R.reduce(adder, 0)(R.map(getValue)(portfolio));

关于javascript - 类型 'number' 不可分配给类型 'ReadonlyArray<{}>',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54835543/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com