Repasa uniones, interfaces y estrechamiento de tipos. Aquí los usarás para diseñar contratos y estados válidos.
Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.
Ubícate antes de avanzar
Al terminar deberías poder relacionar Genéricos con Diseño por contratos y resolver un caso nuevo.
Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.
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.
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.
- 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
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.
Nombra parámetros por su papel cuando haya varios.
Restringe por capacidad, no por implementación concreta.
Evita castings para forzar una relación falsa.
¿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.
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.
No uses herencia solo para reutilizar código.
Marca dependencias como readonly cuando no se reemplazan.
Modela errores y asincronía en las firmas.
¿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.
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.
ESM y CommonJS tienen reglas de resolución distintas.
noEmit permite usar otro compilador conservando comprobación.
No copies un tsconfig sin comprender su runtime.
¿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.
Tu recorrido en tres ideas
- 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
Comprueba que puedes usarlo
Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.
Crear genéricos que no relacionan ningún tipo.
Copiar un tsconfig diseñado para otro entorno.
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 +
- Los genéricos preservan relaciones útiles.
- El dominio no conoce la persistencia concreta.
- El compilador modela los globales y módulos del runtime real.
