簡體   English   中英

是否可以在 TypeScript 中創建通用映射對象類型?

[英]Is it possible to make generic mapped object type in TypeScript?

我有兩組相似的打字稿定義:

enum Operation1 {
  eof = 'eof',
  bof = 'bof'
}
type OperationConfig1 = { [key in Operation1]: TestBedConfig };

enum Operation2 {
  append = 'append',
  prepend = 'prepend'
}
type OperationConfig2 = { [key in Operation2]: TestBedConfig };

我可以使用它們如下:

const config1: OperationConfig1 = {
  [Operation1.eof]: { ... },
  [Operation1.bof]: { ... }
};

const config2: OperationConfig2 = {
  [Operation2.append]: { ... },
  [Operation2.prepend]: { ... }
};

我想用一種通用類型OperationConfig替換OperationConfig1OperationConfig2 ,它接受Operation作為某種形式的參數,例如

type OperationConfigGeneric<T> = { [key in T]: TestBedConfig };

const config1: OperationConfigGeneric<Operation1> = { ... };
const config2: OperationConfigGeneric<Operation2> = { ... };

上面的代碼無效並拋出以下異常:

TS2322:類型 'T' 不能分配給類型 'string | 數量 |
象征'。 類型“T”不可分配給類型“符號”。

問題。 如何參數化映射對象類型 (OperationConfigGeneric)? 或者有什么方便的替代方法?

你可以這樣做,但只有當類型參數 T 是可以作為屬性鍵的東西時才有可能。 所以,如果你用 PropertyKey 作為上限聲明 T,它就可以工作。

type OperationConfigGeneric<T extends PropertyKey> = {
    [key in T]: TestBedConfig
};

const config1: OperationConfigGeneric<Operation1> = { ... };

暫無
暫無

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

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