javascript - ¿Usar un enum dentro de otro enum en typescript?
enum KINDS {
STATIC = 1,
FIELD,
ARG,
VAR
}
enum ALL_KINDS {
STATIC = 1,
FIELD,
ARG,
VAR,
NONE
}
¿Cómo puedo reutilizar el primer enum dentro del segundo?
Respuesta #1
Hasta donde sé, se está considerando extender los enums, mientras tanto puedes usar objetos const en su lugar:
const KINDS = <const>{
STATIC: 1,
FIELD: 2,
ARG: 3,
VAR: 4
};
const ALL_KINDS = <const>{ ...KINDS, NONE: 5 };
También hay otras soluciones en el hilo anterior.
Si deseas que se verifique este tipo, nota que desde la perspectiva del tipo, un enum numérico es equivalente a number:
enum KINDS {
STATIC,
FIELD,
ARG,
VAR
}
declare function func(name: string, type: string, kind: KINDS): any;
func('foo', 'bar', KINDS.ARG); // compiles
func('foo', 'bar', 99); // compiles too (?)
Si utilizas un objeto como se sugiere arriba, también puedes aplicar una verificación estricta de tipos creando un tipo para todos los valores posibles de ese objeto:
const KINDS = <const>{
STATIC: 1,
FIELD: 2,
ARG: 3,
VAR: 4
};
type KIND_VALUE = typeof KINDS[keyof typeof KINDS]
declare function define(name: string, type: string, kind: KIND_VALUE): any;
define('foo', 'bar', KINDS.ARG); // compiles
define('foo', 'bar', 99); // doesn't compile
Esto es un poco más verboso, pero entonces tienes tu tipo realmente verificado.
