簡體   English   中英

如何使用枚舉值的鍵定義對象類型

[英]How to define a type of object with keys of values of enum

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:輸入'{[Enum1.key1]:{some_object:number; }; [Enum1.key2]:{some_object:number; }; [Enum1.key3]:{some_object:number; }; ''不能賦值為'Obj'。 對象文字只能指定已知屬性,'[enum1.key1]'在類型'Obj'中不存在。

我想定義一個類型( ObjType ),它的鍵是Enum1枚舉的所有值。

我怎樣才能做到這一點? 如果不可能,那么強制執行obj1鍵包含所有Enum1值的正確方法是什么?

你很親密 你不想要keyof Enum1 keyof Enum1本質上keyof一個枚舉值的keyof ,因為這是一個字符串枚舉,它將是keyof string Enume1類型可以看作是所有enum memebers的聯合,所以你可以使用它:

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}
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM