javascript - 减少函数上的几个打字稿(不可分配给类型参数)错误
问题描述
[ts]
Argument of type '(sum: number, wallet: IConvertedRate) => number' is not assignable to parameter of type '(previousValue: number, currentValue: "" | { convertedRate: number; }, currentIndex: number, array: ("" | { convertedRate: number; })[]) => number'.
Types of parameters 'wallet' and 'currentValue' are incompatible.
Type '"" | { convertedRate: number; }' is not assignable to type 'IConvertedRate'.
Type '""' is not assignable to type 'IConvertedRate'. [2345]
不确定如何解决这些 Typescript 错误
日志
这wallets
看起来像:
[
{ currency: 'USD', amount: 100 },
{ currency: 'EUR', amount: 500 }
{ currency: 'CHF', amount: 10000 }
]
这convertedRates
看起来像:
[
{ convertedRate: 100 },
{ convertedRate: 437,44 }
{ convertedRate: 9980.9 }
]
下面的代码有效并返回正确的总值10518.34
,但无法摆脱打字稿错误。
代码
interface IConvertedRate {
convertedRate: number;
}
calculateTotalValue(wallets: IWallet[]) {
const { assets } = this.props;
const convertedRates = wallets.map((wallet) => {
const conversion = assets.filter((asset) => asset.currency === wallet.currency)[0];
if (conversion) {
return {
convertedRate: roundFloat(wallet.amount * conversion.rate, 2)
};
}
return '';
});
const total = convertedRates.reduce(function(sum: number, wallet: IConvertedRate) {
return sum + wallet.convertedRate;
}, 0);
console.log('total', total);
return total.toString();
}
解决方案
问题是你的map
函数体返回return '';
,所以签名convertedRates
is ''|IConvertedRate
。您需要重写 map 函数的主体以始终返回一个IConvertedRate
,或者强制转换
推荐阅读
- bluetooth-lowenergy - 当 CTE_Request_Interval 设置为非零时,LE 连接 CTE 请求启用不明确
- vhdl - 用于记录分配的 VHDL 逻辑向量
- ios - 在 iOS 中,如果固定的 SSL 证书过期,我需要重新提交应用程序吗?
- python - 生成器理解忽略类范围
- node.js - 在 npm 开发构建中反应应用程序部署错误
- node.js - 集成测试 node.js socket.io 服务器
- c# - Docker for C# core (linux type) 行为 - 与镜像构建相关
- angular - Angular 7 CLI 以编程方式
- html - 显示当前 div 侧边栏
- codenameone - QRScanner 使用前置摄像头