No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Aprovecha el precio especial.

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

14 Días
14 Hrs
9 Min
7 Seg

Enums

4/22
Recursos

Un enum es un tipo de dato que nos permite crear un set de opciones. Estas opciones son almacenadas bajo una estructura llave-valor similar a un objeto.

Enums en TypeScript

Veamos algunos aspectos de los enums en TypeScript:

  • Los declaramos usando la palabra reservada enum seguido del nombre que tendrá este.
  • Entre llaves estarán los datos llave-valor.
  • Se recomienda que el nombre del enum y de las llaves dentro del mismo estén en mayúscula:
// ENUM
enum ROLES {
	ADMIN = "admin",
	SELLER = "seller",
	CUSTOMER = "customer",
}

// TIPO DE DATO USER
type User = {
	username: string;
	role: ROLES;
}

// CONSTANTE
const nicoUser: User = { // `nicoUser` es del tipo de dato User
	username: 'nicobytes',
	role: ROLES.ADMIN // Le asignamos el rol ADMIN que es uno de los 3 roles disponibles
}

La ventaja que nos da esto es que disponemos de una lista de valores predeterminados que podemos asignar a una variable o a un atributo de la misma. Por tanto, no podemos asignar otro valor que no este dentro de las opciones que nos brinde el enum:
Los posibles valores que puede tomar el atributo role (ADMIN, SELLER o CUSTOMER) en la constante nicoUser

Analizando una librería con enums

Capacitor es una librería que nos ayuda a implementar aplicaciones multiplataformas. Realizaremos un pequeño análisis aparte de su código para observar cómo hacen empleo de los enums y cómo estos nos pueden ayudar en nuestros proyectos.

Podemos realizar la instalación con el siguiente comando:

npm install @capacitor/camera

Ahora veamos el siguiente código que podemos implementar con dicha librería:

import { Camera, CameraResultType } from '@capacitor/camera';

const takePicture = async () => {
  const image = await Camera.getPhoto({
    quality: 90,
    allowEditing: true,
    resultType: CameraResultType.Uri
  });
};

Observamos que CameraResultType es un enum que restringe al atributo resultType a tener un valor dentro de las opciones del enum. En este caso, dicho atributo recibe el valor de la llave Uri del enum.

En conclusión, un enum nos ayuda a no equivocarnos cuando asignemos valores a una variable reduciendo las posibilidades de asignación a una lista de opciones predefinidas.

Coméntanos: ¿Qué casos de uso encontrarías ideal utilizar los enums?

Contribución creada por: Martín Álvarez (Platzi Contributor).

Aportes 25

Preguntas 7

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

Diferencias entre enum y literal types:
Investigando un poco entre algunas diferencias que me gustaría compartirles:

  • ** Asignación de valores, por ejemplo los parámetros de una función:**
enum Estaciones {
  primavera = "Primavera",
  verano = "Verano",
  otonio = "Otoño",
  invierno = "Invierno",
}

const favEstacion = (est: Estaciones): string => {
  return `Mi estación fav es: ${est}`;
};
console.log(favEstacion("verano")); //❌ no se puede mandar un string suelto
console.log(favEstacion(Estaciones.verano)); //✅tenemos que ser mas especificos

Con un enum tenemos que ser mas específicos al momento de llamar a sus valores, no podemos acceder a ellos como si fuera una simple cadena.

Mientras que con un literal type esto es mucho mas sencillo:

type Estaciones = "Primavera" | "Verano" | "Otoño" | "Invierno";

const favEstacion = (est: Estaciones): string => {
  return `Mi estación fav es: ${est}`;
};
console.log(favEstacion("Primavera")); // ✅ Podemos usar los argumentos como si fuera js nativo
  • **Código compilado: **
    Con literal types el código compilado es mas sencillo:
"use strict";
const favEstacion = (est) => {
    return `Mi estación fav es: ${est}`;
};
console.log(favEstacion("Primavera")); // ✅ Podemos usar los argumentos como si fuera js nativo

Mientras que con enums el código resultante es mas complejo y verboso:

"use strict";
var Estaciones;
(function (Estaciones) {
    Estaciones["primavera"] = "Primavera";
    Estaciones["verano"] = "Verano";
    Estaciones["otonio"] = "Oto\u00F1o";
    Estaciones["invierno"] = "Invierno";
})(Estaciones || (Estaciones = {}));
const favEstacion = (est) => {
    return `Mi estación fav es: ${est}`;
};
console.log(favEstacion(Estaciones.primavera)); // ✅ Podemos usar los argumentos como si fuera js nativo

Enums

Los enums funcionan como listas en las que podemos agregar llaves y valores. Esto lo que nos permite es tener un set de opciones predefinidas, evitando pasar un argumento invalido, ya que solo vamos a tener las opciones dentro del enum. Estos se usan de la siguiente manera

enum ROLES {
  ADMIN = "admin",
  USER = "user",
  OWNER = "owner"
}

Se recomiendo nombrar al enum en mayúscula.

Personalmente he usado los enums como una alternativa a crear un archivo constants.js.

En este caso en particular lo usé para los action types de Redux.

enum SearchActionTypes {
  SET_RECOVER_PRODUCTS = 'SEARCH/SET_RECOVER_PRODUCTS',
  SET_LOADING = 'SEARCH/SET_LOADING',
  SET_ALGOLIA_MARKETPLACE = 'SEARCH/SET_ALGOLIA_MARKETPLACE',
  SET_ALGOLIA_STORE = 'SEARCH/SET_ALGOLIA_STORE',
} 

Un uso para los enums que he visto que usan algunos “youtubeDevs” es para el uso de condicionales switch y evitar typos en los “cases” y, su consecuente asignación a la variable a evaluar.

Otras características de enum

Si en un enum las keys solo se declaran y no se inicializan con valores, estas se inician automáticamente por defecto en orden númerico, empezando por el 0 y auto incrementandose.


enum ENUM_NUMBER {
  X,Y,Z
}

console.log(ENUM_NUMBER.X) // 0
console.log(ENUM_NUMBER.Y) // 1
console.log(ENUM_NUMBER.Z) // 2


También es posible inicializar manualmente una key y sus atributos se incrementaran a partir de este valor

enum ENUM_NUMBER {
  X = 1,
  Y,
  Z
}

console.log(ENUM_NUMBER.X) // 1
console.log(ENUM_NUMBER.Y) // 2
console.log(ENUM_NUMBER.Z) // 3

Recomiendo la documentación por si tienen dudas sobre enums. Además, dentro de la documentación se menciona sobre enums de tipo string y number, además, de que no recomienda mezclarlos dentro de un enum.

alias ts= touch $*{.ts}

ts 01-enum

asi que esto son los enums, no lo sabia y lo vi muchas veces cuando tenia error en algun programa y aparecia algo similar a enums con mayusculas. Y si no me equivoco configurando algunas extensiones de vscode

éste profe es excelente …

Probablemente no sea tan buena idea usar enums, ya que no se comportan como objetos una vez convertido a JavaScript, al menos no siempre 😅
Aquí un video de lo que digo, mucho mejor explicado a detalle:
https://www.youtube.com/watch?v=jjMbPt_H3RQ

El código necesario para el archivo 01-camera.ts

import { Camera, CameraResultType } from '@capacitor/camera';

const takePicture = async () => {
  const image = await Camera.getPhoto({
    quality: 90,
    allowEditing: true,
    resultType: CameraResultType.Uri
  })
}

Lo que me dijo ChatGPT:

En TypeScript, un enum es una estructura de datos que permite definir un conjunto de constantes con nombre. Un enum es una forma de crear un tipo de dato personalizado, que contiene un conjunto de valores que pueden ser utilizados en lugar de números o cadenas de caracteres.

Para definir un enum en TypeScript, se utiliza la palabra clave enum, seguida del nombre del enum y una lista de valores separados por comas. Por ejemplo:

enum Direccion {   
    Arriba = "ARRIBA",   
    bajo = "ABAJO",   
    Izquierda = "IZQUIERDA",   
    Derecha = "DERECHA" 
}

En este ejemplo, hemos definido un enum llamado Direccion que contiene cuatro valores: Arriba, Abajo, Izquierda y Derecha. Cada valor está asociado con una cadena de caracteres que representa su nombre.

Los enums en TypeScript también tienen la opción de asignar valores numéricos automáticamente a cada valor en el enum. Por defecto, el primer valor en el enum se establece en 0 y los siguientes valores se incrementan en 1, pero es posible cambiar este comportamiento utilizando el operador = para asignar valores numéricos específicos a cada elemento. Por ejemplo:

enum DiaSemana {
   Lunes,
   Martes,
   Miercoles = 10,
   Jueves,
   Viernes 
}

En este ejemplo, el enum DiaSemana tiene cinco valores, siendo el segundo (Martes) el número 1 y el cuarto (Jueves) el número 11.

Una vez definido un enum, se pueden utilizar sus valores en cualquier parte del código donde se necesite utilizar una constante con nombre. Por ejemplo:

let direccionActual: Direccion = Direccion.Arriba; 

if (direccionActual === Direccion.Abajo) {
   // hacer algo 
}

En este ejemplo, se declara una variable direccionActual de tipo Direccion y se le asigna el valor Direccion.Arriba. Luego, se utiliza un if para verificar si direccionActual es igual al valor Direccion.Abajo. Como se puede ver, esto hace que el código sea más legible y fácil de entender que si se utilizara un número o una cadena de caracteres directamente.

Acá traigo un video acerca de los enums para ayudar a clarificar este concepto tan importante https://www.youtube.com/watch?v=r8G7-hQG07o , espero sea de ayuda.

# type o enum? Tanto **type** como **enum** en **TypeScript** son útiles para trabajar con conjuntos de valores definidos. Sin embargo, tienen propósitos distintos y se usan en diferentes escenarios. Aquí te explico las diferencias, ventajas y cuándo usar cada uno. ## **1. ¿Qué es un type en este contexto?** Un **type** (alias de tipo) puede utilizarse para definir un **conjunto de valores literales**. Esto se hace comúnmente con **uniones de literales**. #### **Ejemplo de un type:** type Estado = "activo" | "inactivo" | "pendiente"; let miEstado: Estado = "activo"; // Solo permite uno de los valores especificados. * Es **estrictamente tipado**: TypeScript verifica que solo puedas asignar valores que pertenezcan al conjunto definido. * No genera código adicional en el JavaScript compilado; es solo para la validación en TypeScript. ## **2. ¿Qué es un enum?** Un **enum** es una característica de TypeScript que define un **grupo de constantes con nombre**. Se utiliza para crear identificadores legibles que representan un conjunto de valores únicos. #### **Ejemplo de un enum:** enum Estado {     Activo = "activo",     Inactivo = "inactivo",     Pendiente = "pendiente", } let miEstado: Estado = Estado.Activo; // Usamos el valor definido en el `enum`. * **Por defecto**: Si no se asignan valores explícitos, los valores de un enum son números que comienzan desde 0. * **Genera código adicional** en el JavaScript compilado, ya que los enum se transforman en un objeto.
Está alterado el orden de los vídeos, primero están las tuplas y segundo los enums 🤷🏻‍♀️
No sé por qué dice que la convención debe ser todo en mayúsculas si todo el mundo los usa en CamelCase.

esto seria como hacer los action types en redux, que seria abstraer esos llave valor y asi poder utilizarlos sin error

Capacitor

Enum

Los enum sirven para definir un conjunto de opciones, que viene siendo como un diccionario de datos, en donde defines una llave y un valor.

Enums

El enum nos permite configurar un set de opciones, es parecido a los literals types, se declaran así.

enum ROLES {
  ADMIN = 'ADMIN',
  SELLER = 'SELLER',
  COSTUMER = 'COSTUMER',
};

Es aconsejable que nos enums vayan es mayúscula.

Esto es importante para hacer múltiples opciones cuando tenemos diferentes opciones.

Por ejemplo vamos a crear un usuario y con el enum de roles antes declarado vamos a asignarle una propiedad de rol dentro del usuario usando un unión type así

type User = {
  username: string;
  role: ROLES;
};

Pero entonces ¿cómo usamos esto? lo que haremos es usar las propiedades el enum y el unión type antes declarado para dar el tipado a una variable o constante.

const juanUser:User

Después vamos a crear un objeto y empezamos a asignar las propiedades

const juanUser:User = {
  username: 'Juan david el MACHO',
}

Pero ¿Cómo asignamos el enumerado? lo hacemos de la siguiente manera

const juanUser:User = {
  username: 'Juan david el MACHO',
  role: ROLES.ADMIN
}

De esta forma podemos usar los enumerados junto a los unión types.

Ahora si definitivamente me paso a typescript.

La importancia de estos enums es increible, me sirvió mucho en mi trabajo !!!❤️

Estuvo muy buena esta clase Nico, no habia visto de esta manera los Enums y el potencial que tienen

muy interesante la función “enums”