以下,我试图获取以磅为单位的value
的总值。但是,这会产生错误TS7053: Element implicitly has an 'any' type because expression of type 'string' can't be used to index type 'MoneyType'. No index signature with a parameter of type 'string' was found on type 'MoneyType'
。
interface MoneyType {
yuan: number,
dollar: number,
pound: number,
}
const CONVERSION_RATE: MoneyType = {
yuan: 10,
dollar: 5,
pound: 1
}
function totalValue(value: MoneyType) {
let totalValue = 0;
for (let moneyType in value) {
totalValue += CONVERSION_RATE[moneyType] * value[moneyType];
}
return totalValue;
}
我知道我可以改用interface MoneyType {[key: string]: number}
,但是有什么办法可以限制人民币,美元和英镑的主要限制?
解决方案1-强制转换为任何:
function totalValue(value: MoneyType) {
let totalValue = 0;
for (let moneyType in value) {
totalValue += (CONVERSION_RATE as any)[moneyType] * (value as any)[moneyType];
}
return totalValue;
}
解决方案2-从键/值结构扩展接口:
interface OnlyNumbers {[key: string]: number}
interface MoneyType extends OnlyNumbers {
yuan: number,
dollar: number,
pound: number,
}
关于功能本身的其他建议: