在我的 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”)
答案 0 :(得分:0)
toLowerCase()
的返回类型是 string
,比 'typeof moderationIcon'
更通用。
我认为您目前可以实现的最接近和类型最安全的事情是使用在 typescript 4.1 中添加的 Template Literal Types 编写一个 getter 函数。虽然它涉及演员阵容:
function getModerationIcon(type: Uppercase<keyof typeof moderationIcon>) {
return moderationIcon[type.toLowerCase() as keyof typeof moderationIcon]
}