Estructuras de Datos
Guía de Arrays, Tuplas, Interfaces, Types, Enums, Sets y Maps con ejemplos prácticos.
Estructuras de Datos en TypeScript
TypeScript permite organizar y estructurar la información mediante colecciones, contratos de objetos y tipos personalizados que garantizan la seguridad de nuestro código.
1. Array
Colección ordenada de elementos que pertenecen al mismo tipo de dato.
typescriptlet frutas: string[] = ["Manzana", "Banana"];
let numeros: number[] = [1, 2, 3];
2. Tupla
Un array de tamaño fijo donde cada posición tiene un tipo de dato específico asignado.
typescriptlet usuario: [string, number] = ["Carlos", 25];
usuario = ["Juan", 30];
3. Interface
Define la estructura o contrato que debe cumplir un objeto, permitiendo propiedades requeridas y opcionales.
typescriptinterface Producto {
id: number;
nombre: string;
precio: number;
descuento?: number; // El '?' indica propiedad opcional
}
const laptop: Producto = {
id: 1,
nombre: "Laptop Pro",
precio: 1200
};
// ❌ Error: Falta la propiedad requerida 'precio'
// const mouse: Producto = {
// id: 2,
// nombre: "Mouse Gamer"
// };
// ✅ Correcto: Incluye todas las propiedades requeridas
const mouse: Producto = {
id: 2,
nombre: "Mouse Gamer",
precio: 250
};
4. Type (Alias de Tipo)
Permite definir nombres personalizados para la estructura de un objeto o para restringir valores mediante uniones.
Alias para Objetos
typescripttype Usuario = {
nombre: string;
email: string;
};
// ✅ Válido
const usuarioActual: Usuario = {
nombre: "Carlos",
email: "john@documnetx.com"
};
// ❌ Error: edad no forma parte del tipo Usuario
// const usuarioActual: Usuario = {
// nombre: "Carlos",
// email: "john@documnetx.com",
// edad: 25
// };
Alias de Tipo para una Unión
typescripttype Rol = "Admin" | "User" | "Guest";
// ✅ Válido
let miRol: Rol = "Admin";
// ❌ Error: "SuperAdmin" no forma parte del tipo Rol
// miRol = "SuperAdmin";
5. Enum
Permite definir un conjunto de constantes nombradas para representar un número limitado de valores posibles.
typescript// Enum de texto
enum Estados {
Pendiente = "PENDIENTE",
Enviado = "ENVIADO",
Entregado = "ENTREGADO"
}
// ✅ Válido
let estadoActual: Estados = Estados.Pendiente;
estadoActual = Estados.Enviado;
// ❌ Error: No se puede asignar un texto que no pertenezca al Enum
// estadoActual = "CANCELADO";
6. Set
Colección de valores donde no se permiten elementos duplicados.
typescriptconst idsUnicos = new Set<string>();
idsUnicos.add("ID-100");
idsUnicos.add("ID-200");
idsUnicos.add("ID-100"); // 💡 Se ignora silenciosamente por ser duplicado
7. Map
Colección de pares clave-valor donde se especifica el tipo de la clave y del valor.
typescriptconst carrito = new Map<string, number>();
carrito.set("Laptop", 1200);
carrito.set("Teclado", 80); // ✅ Válido
// ❌ Error: La clave debe ser un string y el valor un number
// carrito.set(101, "Precio Inválido");
Tabla Resumen
| Estructura | Descripción | Sintaxis de Ejemplo |
|---|---|---|
| Array | Lista ordenada homogénea | string[] o number[] |
| Tupla | Array con tipos fijos por posición | [string, number] |
| Interface | Contrato de estructura para objetos | interface Producto { ... } |
| Type | Alias para objetos o uniones | type Rol = "Admin" | "User"; |
| Enum | Colección de constantes nombradas | enum Estados { ... } |
| Set | Lista sin elementos duplicados | new Set<string>() |
| Map | Diccionario clave-valor tipado | new Map<string, number>() |