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
...