1

在我的 Discord 机器人中,我有一个带有审核图标的枚举:

export enum moderationIcon {
    ban = '',
    kick = '',
    pardon = '',
    warn = ''
}

当我创建审核历史时,我想添加这样的图标:moderationIcon[moderationRow.type.toLowerCase()],但我遇到了这个错误:

元素隐式具有“any”类型,因为“string”类型的表达式不能用于索引类型“typeof moderationIcon”。在“typeof moderationIcon”类型上找不到带有“string”类型参数的索引签名。

如何解决这种错误?

moderationRow.type可以是“BAN”、“KICK”、“PARDON”或“WARN”)

4

1 回答 1

0

的返回类型toLowerCase()string,它比 更通用'typeof moderationIcon'

我认为您目前可以实现的最接近和最安全的事情是使用typescript 4.1 中添加的模板文字类型编写一个 getter 函数。它涉及演员阵容:

function getModerationIcon(type: Uppercase<keyof typeof moderationIcon>) {
  return moderationIcon[type.toLowerCase() as keyof typeof moderationIcon]
}

于 2021-07-27T09:45:59.097 回答