Búsqueda de sitios web

typescript - Crear tipo unión a partir de const de enums


Dado el siguiente patrón donde se crea una constante a partir de un conjunto de enumeraciones:

enum ServiceKeys {
  SERVICE1 = 'Service1',
  SERVICE2 = 'Service2',
}

enum Service1Actions {
  ADD = 1,
}

enum Service2Actions {
  DELETE = 1,
}

const serviceActions = {
  [ServiceKeys.SERVICE1]: Service1Actions,
  [ServiceKeys.SERVICE2]: Service2Actions,
}

Me gustaría producir un tipo de unión de todos los enums en el const que sea equivalente a:

type AnyServiceAction = Service1Actions | Service2Actions;

El objetivo final es usar este tipo para crear una configuración. He reducido mi código a su forma más simple para demostrarlo, pero básicamente así es como se supone que debe funcionar. Por supuesto, en su forma original, hay muchas más propiedades asociadas a la acción especificada.

class Entry {
  public readonly action: AnyServiceAction | null;
  constructor(action: AnyServiceAction = null) {
    this.action = action;
  }
}

Y así se construye la configuración de esta manera:

class Config {
  public readonly [ServiceKeys.SERVICE1]: Entry[] = [
    new Entry(serviceActions[ServiceKeys.SERVICE1].ADD),
  ];
}