打字稿:数据库中的枚举索引给出了类型错误

时间:2021-07-27 08:58:13

标签: typescript types

在我的 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”)

1 个答案:

答案 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]
}