# Conoces bien los Enums de TypeScript?

En el día a día de todo programador es bastante común tener que trabajar con Enums. Durante mis años de desarrollo con PHP, Javascript, Python, todos tienen el concepto de Enums.

## ¿Que es un Enum?

Los enums como concepto general son estructuras que nos proponen varios valores para una variable.

```typescript
enum EstadoPedido {
    Activo = "ACTIVO",
    Cancelado = "CANCELADO",
}
```

Los Enums en TypeScript si se definen de un tipo, en el caso anterior **string,** los demás elementos deben ser del mismo tipo.

TypeScript permite tener Enums **con diferentes tipos de dato** pero todos los elementos del enum deben estar definidos. **Se recomienda NO mezclar tipos en un E num.**

```typescript
enum MiEnum {
 OpcionA = 10,
 OpcionB = "TEXTO"
}
```

Los Enums se pueden usar también como un tipo de dato para nuestras variables.

```typescript
enum EstadoPedido {
  Activo = "ACTIVO",
  Cancelado = "CANCELADO",
}
const miVariable: EstadoPedido = EstadoPedido.Activo
```

## Enums con valores implícitos

Hasta ahora hemos visto Enums donde definimos todos sus elementos. También podemos crear un Enum donde sus valores sean implícitos, que quiero decir con esto pues veamos un ejemplo .

```typescript
enum OtroEnum {
    OpcionA,
    OpcionB
}
console.log(OtroEnum.OpcionA, OtroEnum.OpcionB)
// El resultado sería:  0 , 1
```

Cuando no definimos el primer valor de nuestro Enum este toma el valor de 0 y los demás elementos se van incrementando en 1.

También podemos redefinir el valor inicial de incremento.

```typescript
enum OtroEnum {
    OpcionA,
    OpcionB = 100,
    OpcionC
}
console.log(OtroEnum.OpcionA, OtroEnum.OpcionB, OtroEnum.OpcionC)
// El resultado sería:  0 , 100, 101
```

Espero les sirva este corto artículo. Los Enums pueden parecer sencillos pero tienen sus cositas escondidas.
