![](/img/trans.png)
[英]Is it possible to have a Generic for each Mapped Type in 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
替換OperationConfig1
和OperationConfig2
,它接受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.