Búsqueda de sitios web

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.

Artículos relacionados