【问题标题】:How to define a type of object with keys of values of enum如何使用枚举值的键定义对象类型
【发布时间】:2019-07-21 02:50:24
【问题描述】:
export const enum Enum1{
  key1='value1',
  key2='value2',
  key3='value3',
}

type ObjType = {
  [Key in keyof Enum1]: {
    some_object: number
  }
}

export const obj1:ObjType ={
  [Enum1.key1]:{some_object:123},
  [Enum1.key2]:{some_object:123},
  [Enum1.key3]:{some_object:123}
}

以上代码产生错误:

错误:(145, 3) TS2322: Type '{ [Enum1.key1]: { some_object: number; }; [Enum1.key2]: { some_object: number; }; [Enum1.key3]: { some_object: number; }; }' 不可分配给类型 'Obj'。 对象字面量只能指定已知属性,而 '[Enum1.key1]' 不存在于类型 'Obj' 中。

我想定义一个类型 (ObjType),它的键是 所有 Enum1 枚举的值。

我该怎么做?如果不可能,那么强制 obj1 键包含所有 Enum1 值的正确方法是什么?

【问题讨论】:

    标签: javascript typescript


    【解决方案1】:

    你很接近。你不想要keyof Enum1keyof Enum1 本质上是keyof 一个枚举值,因为这是一个字符串枚举,所以它是keyof stringEnume1 类型可以看作是所有枚举成员的联合,所以你可以使用它:

    export const enum Enum1{
      key1='value1',
      key2='value2',
      key3='value3',
    }
    
    type ObjType = {
      [Key in Enum1]: {
        some_object: number
      }
    }
    
    export const obj1:ObjType ={
      [Enum1.key1]:{some_object:123},
      [Enum1.key2]:{some_object:123},
      [Enum1.key3]:{some_object:123}
    }
    

    【讨论】:

    • 太棒了!您能否提供指向 in 关键字的任何类型文档的链接? (可以在它的右侧和左侧)。
    • @StavAlfi 在左侧您声明了一个类型参数,在右侧标志您可以拥有任何可用于索引或此类类型联合的类型。除了官方手册,我什么都没有
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多