我正在嘗試創建一個索引型別,其索引是enumBUT 的值,但enum來自通用引數。
export type EnumMap<TEnum extends string | undefined = undefined> = {
[key: TEnum]: ValueClass;
}
export type EnumMap<TEnum extends string | undefined = undefined> = {
[key: keyof TEnum]: ValueClass;
}
這兩個實作都顯示了錯誤:
索引簽名引數型別不能是文字型別或泛型型別。請考慮改用映射物件型別。
當我按照建議將其實作為映射物件時:
export type EnumMap<TEnum extends string | undefined = undefined> = {
[TEnumKey in keyof TEnum]: ValueClass;
}
它不會在定義中顯示任何錯誤,但它只接受TEnum實體作為值。當我嘗試實體化一個EnumMap.
型別'{“測驗”:ValueClass;}' 不可分配給型別 'TestEnum'。
我用這個enum作為測驗:
export enum TestEnum {
test = 'test'
}
有沒有辦法使用泛型enum作為型別的索引?
PS.:我知道我可以使用字串作為鍵來實作它,但我想將索引系結到列舉值;
export type EnumMap = {
[key: string]: ValueClass;
}
const map: EnumMap = { [TestEnum.test]: {...} }; // works fine
uj5u.com熱心網友回復:
這對你有用嗎?
enum Enum {
"ABC" = "abc",
"CDE" = "cde"
}
export type EnumMap<TEnum extends string = Enum> = {
[key in TEnum]?: string;
}
const map: EnumMap = { [Enum.ABC]: "123" };
由于TEnum是一個字串聯合,您可以[key in TEnum]在索引簽名中使用它。
我不知道你為什么string | undefined用TEnum...
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/478351.html
標籤:javascript 打字稿 仿制药 索引 枚举
