Enums en TypeScript son útiles, pero a veces son demasiado verbosos comparados con los literales.

El truco

// ANTES: Uso de Enum - verboso y poco flexible
enum Color {
  Rojo = "rojo",
  Verde = "verde",
  Azul = "azul",
}

function pintar(color: Color) {
  console.log(`Pintando de color ${color}`);
}

// DESPUÉS: Literales tipo union y constantes - más simple y flexible
const Color = {
  Rojo: "rojo" as "rojo",
  Verde: "verde" as "verde",
  Azul: "azul" as "azul",
};

type Color = keyof typeof Color;

function pintar(color: Color) {
  console.log(`Pintando de color ${Color[color]}`);
}

Enums tradicionales a menudo ocupan más espacio y pueden ser restrictivos al tratar con strings. En su lugar, define un objeto con constantes y utiliza literales tipo union para lograr la flexibilidad y simplicidad de los literales mientras mantienes la estructura y autocorrección de Enums. Este enfoque te permite aún tener una referencia clara a los valores permitidos, pero sin el exceso de código que a menudo acompaña el uso de Enums.

Combinar la simplicidad de los literales y la estructura de los Enums da lugar a un código más limpio y manejable.