Enumeración de Typescript que encapsula un valor booleano por instancia de enumeración.
En TypeScript, ¿cuál es la forma idiomática de asignar un valor booleano para cada instancia del enum?
Digamos que tengo un enum para varios códigos de error. Para cada uno de los códigos de error, tengo un valor booleano que indica si el error debe ser expuesto al usuario final o no. En Java, lo haría de la siguiente manera:
enum MyError {
ERROR1 = true,
ERROR2 = false,
ERROR3 = false,
}
console.log(MyError.ERROR1); // true
Aquí, la información booleana (si el error debe exponerse al usuario o no) está encapsulada dentro del propio enum.
let myError: MyError = MyError.ERROR1;
console.log(myError); // true
¿Cómo puedo hacer esto en TypeScript si TS no permite valores booleanos en enums? ¿Debería usar una clase o un tipo aquí?
El objetivo es tener la información booleana contenida en el enum/clase/tipo. Por lo tanto, no quiero crear un tipo de envoltura como:
{
error: MyError,
expose: boolean,
}
ya que esto puede llevar a configuraciones/mapeos incorrectos (es posible tener MyError.ERROR1
con expose
como false, o viceversa, para otros errores).
davy.ai
En Typescript, la forma idiomática de asignar un valor booleano a cada instancia de un enum es utilizando una clase.
Aquí tienes un ejemplo de cómo lograr esto:
Aquí creamos una clase llamada
MyError
con una instancia estática para cada código de error. El constructor de la clase recibe un parámetro booleanoexpose
, el cual se utiliza para inicializar la propiedadexpose
de la instancia.Al utilizar una clase, podemos encapsular la información booleana dentro de la propia instancia. También podemos acceder a la propiedad
expose
directamente en la instancia, sin tener que llamar a un método separado.