我如何遍历已定义键的对象,并使用这些键索引相同类型的对象?

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

以下,我试图获取以磅为单位的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},但是有什么办法可以限制人民币,美元和英镑的主要限制?

typescript
1个回答
0
投票

解决方案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,
}

关于功能本身的其他建议:

  • 循环认为CONVERSION_RATE成员,因为对value参数的控制较少,并且可以具有其他成员。
  • 在使用value [moneyType]以避免NaN结果之前检查是否已定义value [moneyType
© www.soinside.com 2019 - 2024. All rights reserved.