Saltar al contenido principal
eLearner.app
Módulo 2 · Lección 1 de 23/14 en el curso~12 min
Lecciones del módulo (1/2)

Type Alias vs Interfaces

En TypeScript, podemos definir la estructura de objetos complejos de dos formas principales: usando las Interfaces (interface) o los Alias de Tipo (type). Ambos sirven para describir la "forma" de un objeto o de una estructura de datos, pero tienen algunas diferencias fundamentales.


Las Interfaces (interface)

Una interfaz define un contrato para la estructura de un objeto. Es la herramienta estándar para describir la forma de objetos y APIs de manera extensible.

TS
interface Book {
  title: string;
  pages: number;
  author?: string; // Proprietà opzionale (può essere omessa)
}

const myBook: Book = {
  title: 'Il Signore degli Anelli',
  pages: 1200,
};

El signo de explicación o interrogación (?) marca una propiedad como opcional. El objeto myBook es válido incluso si omite la propiedad author.


Los Alias de Tipo (type)

Un alias de tipo permite asociar un nuevo nombre a cualquier tipo existente, incluidos tipos primitivos, uniones, tuplas o estructuras completas de objetos.

TS
type Point = {
  x: number;
  y: number;
};

const coordinates: Point = { x: 10, y: 20 };

Diferencias Clave: Extensión y Declaration Merging

Aunque interface y type son intercambiables para la mayoría de los casos de uso comunes, presentan dos diferencias cruciales:

1. Extensibilidad (Herencia)

Las interfaces se extienden con la palabra clave extends:

TS
interface User {
  username: string;
}

interface Admin extends User {
  privileges: string[];
}

Los alias de tipo no se pueden extender con extends, pero se pueden combinar usando la intersección (&):

TS
type User = {
  username: string;
};

type Admin = User & {
  privileges: string[];
};

2. Declaration Merging (Unión de Declaraciones)

El compilador une automáticamente varias interfaces con el mismo nombre dentro del mismo ámbito:

TS
interface User {
  name: string;
}
interface User {
  email: string;
}
// Ora User ha sia 'name' che 'email'!

Este comportamiento no está admitido por los alias de tipo: declarar el mismo type dos veces provocará un error de compilación.


Pruébalo tú

Ejercicio 1: Interfaz Usuario

Ejercicio#ts.m2.l1.e1
Intentos: 0Cargando...

Define una interfaz llamada User que describa un objeto usuario. La interfaz debe contener: id como número, username como cadena y email como cadena opcional.

Cargando editor...
Mostrar pista

Usa la sintaxis email?: string para marcarla como opcional.

Solución disponible después de 3 intentos

Ejercicio 2: Alias de Tipo Point2D

Ejercicio#ts.m2.l1.e2
Intentos: 0Cargando...

Crea un alias de tipo llamado Point2D que represente un punto bidimensional con las coordenadas x e y (ambos números).

Cargando editor...
Mostrar pista

Usa la sintaxis type Point2D = { x: number; y: number; };

Solución disponible después de 3 intentos

Ejercicio 3: Extensión de Interfaces

Ejercicio#ts.m2.l1.e3
Intentos: 0Cargando...

Define una interfaz llamada Product con id (número) y price (número). Luego, define una interfaz llamada DiscountedProduct que extienda Product y agregue una propiedad opcional llamada discountCode (cadena).

Cargando editor...
Mostrar pista

Usa extends Product para heredar los campos y agrega discountCode?: string.

Solución disponible después de 3 intentos

Ejercicio 4: Configuración del Servidor

Ejercicio#ts.m2.l1.e4
Intentos: 0Cargando...

Define un alias de tipo llamado ServerConfig que represente un objeto de configuración para un server. Debe contener: host (cadena), port (número) y useHttps como campo booleano opcional.

Cargando editor...
Mostrar pista

Usa la sintaxis type ServerConfig = { host: string; port: number; useHttps?: boolean; }.

Solución disponible después de 3 intentos