【发布时间】:2021-02-07 06:19:32
【问题描述】:
我有一个关于如何在 TS 中正确使用索引的严肃问题,这有一段时间了。比如……
setup.battle.enemies.forEach(enemy => {
const _thisMove = enemy.movements.random();
enemy.curMovement = {
name : _thisMove.name,
damage : _thisMove.elemental.damage(),
element : _thisMove.elemental.element,
setMove() {
const _resistances = variables().player.resistances;
let _enemyDamage = Math.round(this.damage - _resistances[this.element]);
}
}
})
在这种情况下,_resistances[this.element] 返回此错误... 元素隐含地具有 'any' 类型,因为 'any' 类型的表达式不能用于索引类型'{物理:数字;火:数字;冰:数字;能量:数字;水:数字;灯:数字;黑暗:数字; }'.ts(7053)
还有敌人类的抵抗力obj...
this.resistances = {
physical : 2,
fire : 0,
ice : 0,
energy : 0,
water : 0,
light : -2,
darkness : 0
};
所以我想问一下,我怎样才能使它正常工作?
元素属性是敌人技能数组的一部分。
this.movements = [
{
name : "Knife attack",
elemental : {
element : "physical",
damage : () => random(2, 4),
getElem : function() { return this.element }
}
}
]
【问题讨论】:
-
为所有事物赋予类型(毕竟它是 TypeScript)。
this.element是什么类型的?目前,它是any,但这不起作用,因为错误告诉你。它需要(理想情况下)key of resistances或"physical"|"fire"|"ice"|...或string。理想情况下,resistances本身就是一个类型;interface或匿名类型。
标签: typescript