I'm trying to create an indexed type whose index are the values of an enum BUT the enum comes from a generic argument.
export type EnumMap<TEnum extends string | undefined = undefined> = {
[key: TEnum]: ValueClass;
}
export type EnumMap<TEnum extends string | undefined = undefined> = {
[key: keyof TEnum]: ValueClass;
}
Both of those implementations shows the error:
An index signature parameter type cannot be a literal type or generic type. Consider using a mapped object type instead.
When I implement it as a mapped object as suggested:
export type EnumMap<TEnum extends string | undefined = undefined> = {
[TEnumKey in keyof TEnum]: ValueClass;
}
It doesn't show any errors at the definition but it only accepts TEnum instances as the value. It shows this error when I try to instantiate an EnumMap.
Type '{ "test": ValueClass; }' is not assignable to type 'TestEnum'.
I'm using this enum as a test:
export enum TestEnum {
test = 'test'
}
Is there any way to use a generic enum as a type's index?
PS.: I understand I can implement it using string as the key, but I want to tie the indexes to the enum values;
export type EnumMap = {
[key: string]: ValueClass;
}
const map: EnumMap = { [TestEnum.test]: {...} }; // works fine