reactjs - Error de análisis de tipo literal de plantilla en TypeScript
Estoy intentando hacer que type test se convierta en una unión de los valores del enum ModalTypes. Según la documentación, debería poder escribir un type test como en la fila comentada. Parece que devuelve el tipo correcto que quiero, pero me está dando un error de compilación. Si escribo la unión manualmente como se muestra en esta imagen, todo funciona como se espera. ¿Qué me estoy perdiendo?
Aquí está el error que obtengo Error de análisis: Se esperaba un tipo. Aunque no veo ninguna ondulación en el código.
Puedes ver claramente que test se está convirtiendo en la unión de tipos string que estoy buscando. Pero me está dando el error de arriba.
Mismo código, en texto...
export enum ModalTypes {
USER = 'user',
NOTE = 'note',
REMINDER = 'reminder',
CONTRACT = 'contract',
}
type test = `${ModalTypes}`;
// type test = 'user' | 'note' | 'reminder' | 'contract';
type req = {
[key in test]: {
try: string;
};
};
Respuesta #1
En tu caso, ¿por qué no usar algo como:
// 'USER' | 'NOTE' | ...
type Key = keyof typeof ModalTypes;
// basically an alias for ModalTypes
type Value = (typeof ModalTypes)[Key];
Vale la pena mencionar que tu ModalTypes 'type' ya representa la unión de los valores de tu enumeración. Por lo tanto, Value es básicamente un alias enrevesado para ModalTypes. Que tu tipo de enumeración ya es una unión de sus valores se puede ver aquí:
type Omitted = Exclude<Value, 'user'>;
// Mousing over the above gives the following hint in VS Code:
type Omitted = ModalTypes.NOTE | ModalTypes.REMINDER | ModalTypes.CONTRACT
Respuesta #2
Me parece que hay algunas configuraciones incorrectas en tu linter.
Además, puedes escribir este tipo req usando Record.
type req = Record<ModalTypes, { try: string }>


