Estoy tratando de crear un tipo indexado cuyo índice son los valores de una enum PERO la enum proviene de un argumento genérico.
export type EnumMap<TEnum extends string | undefined = undefined> = { [key: TEnum]: ValueClass; } export type EnumMap<TEnum extends string | undefined = undefined> = { [key: keyof TEnum]: ValueClass; }Ambas implementaciones muestran el error:
Un tipo de parámetro de firma de índice no puede ser un tipo literal o un tipo genérico. Considere usar un tipo de objeto asignado en su lugar.
Cuando lo implemento como un objeto mapeado como se sugiere:
export type EnumMap<TEnum extends string | undefined = undefined> = { [TEnumKey in keyof TEnum]: ValueClass; } No muestra ningún error en la definición, pero solo acepta instancias de TEnum como valor. Muestra este error cuando intento crear una instancia de EnumMap .
Escriba '{ "prueba": ValueClass; }' no es asignable para escribir 'TestEnum'.
Estoy usando esta enum como prueba:
export enum TestEnum { test = 'test' } ¿Hay alguna forma de usar una enum genérica como índice de tipo?
PD: entiendo que puedo implementarlo usando una cadena como clave, pero quiero vincular los índices a los valores de enumeración;
export type EnumMap = { [key: string]: ValueClass; } const map: EnumMap = { [TestEnum.test]: {...} }; // works fine¿Esto funciona para tí?
enum Enum { "ABC" = "abc", "CDE" = "cde" } export type EnumMap<TEnum extends string = Enum> = { [key in TEnum]?: string; } const map: EnumMap = { [Enum.ABC]: "123" }; Dado que TEnum es una unión de cadenas, puede usarla como [key in TEnum] dentro de la firma del índice.
No estoy seguro de por qué usaste string | undefined para TEnum ...