【问题标题】:Lookup object for string enum "has no index signature"字符串枚举的查找对象“没有索引签名”
【发布时间】:2018-03-24 07:29:51
【问题描述】:

我有一个字符串枚举,其值应与显示名称相关联,如下所示:

enum MyEnum {
  key1 = 'one',
  key2 = 'two',
  key3 = 'three',
}

const myKey: MyEnum = 'two' as MyEnum; // This value is only known at runtime

const lookupResult = {
  [MyEnum.key1]: 'display name for key1',
  [MyEnum.key2]: 'display name for key2',
}[myKey];

但是我对查找对象的使用产生了这个错误:

TS7017:元素隐式具有“任何”类型,因为类型 '{ [MyEnum.key1]:字符串; [MyEnum.key2]:字符串; }' 没有索引 签名。

如何将myKey 与其显示名称匹配而不会出现错误?

我应该根本不使用枚举吗?在各种情况下,我都需要枚举值和显示名称。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    只需使用枚举键。

    enum MyEnum {
      key1 = 'one',
      key2 = 'two',
      key3 = 'three',
    }
    
    const lookupResult = {
      [MyEnum.key1]: 'display name for key1',
      [MyEnum.key2]: 'display name for key2',
    }[MyEnum.key2];
    

    【讨论】:

    • myKey 的值仅在运行时知道 - 我将编辑我的问题以使其更清楚
    • 为什么不能只使用 const myKey = 'value from runtime' ?
    • 顺便说一句:执行您的示例中的代码时,我没有任何错误。打字稿版本 2.8.0
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多