TypeScriptLección 9 de 16

Enum frente a uniones de literales

Un enum crea un objeto real que sigue en el JavaScript tras compilar. Una unión de literales desaparece sin dejar rastro y suele ser más sencilla.

Lo esencial

  • Un enum numérico cuenta desde cero y funciona en ambos sentidos: Role[1] es "Member".
  • Un enum de texto, Open = "open", deja valores legibles en los logs.
  • La unión "free" | "pro" | "team" simplemente desaparece al compilar.
  • Un array con as const da a la vez una lista para recorrer y un tipo: (typeof LEVELS)[number].
  • Ejecutar .ts directamente en Node.js y la opción erasableSyntaxOnly rechazan los enum.

Ejemplo

enum Role {  Guest,  Member,  Admin,}// After compiling, Role is a real object: { Guest: 0, Member: 1, Admin: 2, ... }console.log(`Admin = ${Role.Admin}, 1 = ${Role[1]}`); type Plan = "free" | "pro" | "team"; // disappears after compilingconst plan: Plan = "pro"; const LEVELS = ["low", "medium", "high"] as const;type Level = (typeof LEVELS)[number]; // "low" | "medium" | "high"const level: Level = "high"; console.log(`${plan} / ${level} / ${LEVELS.length} levels`);

En JavaScript, Role es un objeto con propiedades y claves inversas. Plan y Level solo existen para la comprobación: en el código compilado no queda ni una línea de ellos.

Tarea

Cómo usar el editor⌘ Enter o Ctrl Enter ejecuta el código, ⇧ ⌘ Enter comprueba la tarea.Tab y Mayús Tab sangran la línea o la selección; Esc y luego Tab sale del editor.La comprobación compara lo que imprimió el programa con la tarea; los espacios al final de línea no cuentan.Tras dos comprobaciones fallidas puedes ver la solución. Tu código se guarda en este navegador.

Sustituye enum Status por un array STATUSES con as const y un tipo derivado de él; luego recórrelo e imprime tres líneas: «open: waiting for reply», «pending: in progress», «closed: done».

Salida

Aquí aparecerá lo que imprima el programa.