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

Declaraciones y Merging

Los archivos de declaración de tipo (con extensión .d.ts) se utilizan en TypeScript para describir la forma del código JavaScript existente sin implementar ninguna lógica real. Solo contienen definiciones de tipos, interfaces y firmas de funciones.

Estos archivos son fundamentales cuando usamos librerías de terceros escritas en JavaScript puro.


Declaration Merging (Fusión de Declaraciones)

El Declaration Merging es un comportamiento en el que el compilador une dos o más definiciones distintas con el mismo nombre en una sola definición.

El caso más común es la fusión de interfaces:

TS
interface User {
  name: string;
}

interface User {
  age: number;
}

// ¡La interfaz resultante User posee tanto name como age!
const student: User = {
  name: 'Alice',
  age: 23,
};

Si las propiedades tienen el mismo nombre, deben ser del mismo tipo; de lo contrario, TypeScript informará de un error.


Modificar módulos globales y externos

Podemos usar el declaration merging para extender interfaces definidas en otros módulos o en el ámbito global.

Por ejemplo, si queremos añadir una propiedad al objeto global window del navegador:

TS
declare global {
  interface Window {
    analyticsToken: string;
  }
}

Usando declare global, le indicamos a TypeScript que estamos insertando una nueva firma dentro de la interfaz Window que ya existe a nivel global.


Pruébalo tú mismo

Ejercicio 1: Fusión de declaraciones básica

Ejercicio#ts.m7.l2.e1
Intentos: 0Cargando...

En TypeScript, las interfaces con el mismo nombre en el mismo ámbito se fusionan automáticamente. Declara una interfaz User con la propiedad name: string, luego en un segundo bloque declara la misma interfaz User añadiendo la propiedad age: number. Finalmente, declara una constante user de tipo User con los valores apropiados.

Cargando editor...
Mostrar pista

Declara dos veces interface User insertando las respectivas propiedades y luego asigna los campos al objeto user.

Solución disponible después de 3 intentos

Ejercicio 2: Extensión de la interfaz global Window

Ejercicio#ts.m7.l2.e2
Intentos: 0Cargando...

Imagina que quieres extender la interfaz global Window para añadir una propiedad personalizada llamada config de tipo Record<string, string>. Escribe la declaración correcta usando declare global para fusionar la nueva propiedad en la interfaz Window global.

Cargando editor...
Mostrar pista

Usa declare global { interface Window { config: Record<string, string>; } }.

Solución disponible después de 3 intentos