JavaScript · Sección 13

TypeScript: diseño, genéricos y módulos

Genéricos, utilidades de tipos, módulos, composición y modelado de estados imposibles de representar incorrectamente.

3
lecciones
3
ejercicios resueltos
CONTENIDO ORIGINAL

Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.

ANTES DE EMPEZAR

Ubícate antes de avanzar

01 / PUNTO DE PARTIDA

Repasa uniones, interfaces y estrechamiento de tipos. Aquí los usarás para diseñar contratos y estados válidos.

02 / META OBSERVABLE

Al terminar deberías poder relacionar Genéricos con Diseño por contratos y resolver un caso nuevo.

03 / TIEMPO SUGERIDO

Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.

04 / PREPARA EL LABORATORIO

Utiliza un navegador con herramientas de desarrollo y una versión LTS de Node.js con npm. Angular y MongoDB se preparan cuando llegues a esos bloques.

Abrir la guía de herramientas →
Diagnóstico rápido: ¿cómo se relacionan Genéricos y Diseño por contratos? +

No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.

Ruta guiada · 3 lecciones

Aprende el tema paso a paso

Profundizarás en genéricos, clases, módulos y configuración para que los tipos sigan al dominio y al entorno real.

Al terminar podrás
  • Un genérico conserva relaciones entre tipos
  • Los modificadores ayudan al diseño, pero la API sigue importando más
  • La configuración debe modelar el entorno que ejecutará el código
01
Genéricos

Un genérico conserva relaciones entre tipos

T no significa “cualquier cosa sin control”; representa un tipo que el consumidor aporta o el compilador infiere. Una restricción extends declara la capacidad mínima. Si el parámetro genérico aparece una sola vez y no relaciona entradas con salidas, quizá no sea necesario.

01

Nombra parámetros por su papel cuando haya varios.

02

Restringe por capacidad, no por implementación concreta.

03

Evita castings para forzar una relación falsa.

Comprueba lo aprendido · 01

¿Qué relación expresa K extends keyof T?

Mostrar respuesta +

Que K debe ser una clave válida de T; así el acceso y el tipo de retorno quedan conectados.

02
Clases y composición

Los modificadores ayudan al diseño, pero la API sigue importando más

public, protected y private de TypeScript guían al compilador; #private también se aplica en ejecución. Clases abstractas comparten estructura, pero una interfaz y composición suelen acoplar menos. La inyección de dependencias mantiene separadas regla, red y persistencia.

01

No uses herencia solo para reutilizar código.

02

Marca dependencias como readonly cuando no se reemplazan.

03

Modela errores y asincronía en las firmas.

Comprueba lo aprendido · 02

¿Qué mejora aporta depender de Repositorio<Proyecto> y no de una clase MongoRepositorio?

Mostrar respuesta +

El caso de uso conoce una capacidad, no una tecnología; puede sustituirse y probarse sin la base real.

03
Módulos y tsconfig

La configuración debe modelar el entorno que ejecutará el código

module, moduleResolution, target y lib deben corresponder al navegador, bundler o Node.js real. strict es una base, no un adorno. Un mismo tsconfig no siempre describe correctamente DOM, servidor y pruebas; proyectos grandes pueden separar configuraciones conectadas.

01

ESM y CommonJS tienen reglas de resolución distintas.

02

noEmit permite usar otro compilador conservando comprobación.

03

No copies un tsconfig sin comprender su runtime.

Comprueba lo aprendido · 03

¿Por qué una configuración incorrecta de moduleResolution puede compilar imports que fallan al ejecutar?

Mostrar respuesta +

Porque el compilador debe imitar cómo el host resuelve módulos. Si modela otro entorno, su conclusión no coincide con el runtime.

Resumen de la sección

Tu recorrido en tres ideas

  1. Un genérico conserva relaciones entre tipos
  2. Los modificadores ayudan al diseño, pero la API sigue importando más
  3. La configuración debe modelar el entorno que ejecutará el código
CIERRE DE LA SECCIÓN

Comprueba que puedes usarlo

Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.

ERROR 01

Crear genéricos que no relacionan ningún tipo.

ERROR 02

Copiar un tsconfig diseñado para otro entorno.

DESAFÍO INTEGRADOR

Ahora hazlo sin guía

Diseña un caso de uso genérico con repositorio, implementación en memoria y configuración separada para navegador y Node.

Mostrar pauta de corrección +
Una respuesta sólida:
  • Los genéricos preservan relaciones útiles.
  • El dominio no conoce la persistencia concreta.
  • El compilador modela los globales y módulos del runtime real.