es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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).

Tags:  ,

Answer

  1. Avatar for 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:

    class MyError {
      static ERROR1 = new MyError(true);
      static ERROR2 = new MyError(false);
      static ERROR3 = new MyError(false);
    
      constructor(public expose: boolean) {}
    }
    
    // Ejemplo de uso
    const myError = MyError.ERROR1;
    console.log(myError.expose); // true
    

    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 booleano expose, el cual se utiliza para inicializar la propiedad expose 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.

Comments are closed.