我正在用TypeScript制作一款游戏。游戏的库存系统包含如下几个值:
export const Inventory = {
food: 0,
medicine: 0,
rifleAmmo: 0,
pistolAmmo: 0
}
目前,我正在使用以下功能管理从库存中添加和减去
export const removeFromInventory = ({amount}: itemInterface) => {
return Inventory.rifleAmmo = Inventory.rifleAmmo - amount
}
我想让这个函数接受一个动态值的名称和金额,目前我有这个从其他答案在这里堆栈溢出:
enum itemType {
'rifle-ammo'
}
interface itemInterface {
amount: number,
item: itemType
}
export const AddToInventory = ({amount, item}: itemInterface) => {
return Inventory[item] = Inventory.item + amount
}
然而,我得到的错误是字符串不能用作索引类型,类型为"any"也没用。我知道这是可能的,但我缺乏TypeScript技能。如何在TypeScript中动态访问一个对象的属性?
你可以这样做
type inventory = typeof Inventory;
export const Inventory = {
food: 0,
medicine: 0,
rifleAmmo: 0,
pistolAmmo: 0
}
enum itemType {
'rifle-ammo'
}
interface itemInterface {
amount: number,
item: keyof inventory
}
export const AddToInventory = ({amount, item}: itemInterface) => {
return Inventory[item] = Inventory[item] + amount
}