Modela contratos, reduce estados inválidos y responde desde fundamentos hasta tipos avanzados usados en entrevistas.
8 temas claveJunior → SeniorVersión 1
Progreso0%
0 de 8 dominados
★★★★★Junior → Mid🔥 Fundamental
Inferencia, anotaciones y tipos primitivos
TypeScript infiere tipos a partir del valor y permite anotarlos cuando el contrato no es evidente. El objetivo no es escribir tipos por todas partes, sino conservar información útil.
10–15 min
🟢 Base🟡 Entrevista🔴 Senior
Qué debes entender
TypeScript infiere tipos a partir del valor y permite anotarlos cuando el contrato no es evidente. El objetivo no es escribir tipos por todas partes, sino conservar información útil.
Cómo funciona
La inferencia ocurre en compilación. Los tipos se eliminan al generar JavaScript, por lo que no validan datos externos en runtime.
Ejemplo
const port = 3000;
let status: "idle" | "loading" = "idle";
status = "loading";
console.log(typeof port, status);
Resultadonumber loading
Qué está pasando
port se infiere como number; status solo admite los literales declarados. En runtime sigue siendo JavaScript.
Pregunta típica
¿TypeScript valida una respuesta HTTP en runtime?
Respuesta Senior
No. TypeScript comprueba el código durante desarrollo/compilación. Para datos externos necesito validación runtime con un schema, guards o una librería como Zod.
Ambos describen formas. interface destaca para contratos extensibles y declaration merging; type representa también unions, primitivas, tuplas y transformaciones.
10–15 min
🟢 Base🟡 Entrevista🔴 Senior
Qué debes entender
Ambos describen formas. interface destaca para contratos extensibles y declaration merging; type representa también unions, primitivas, tuplas y transformaciones.
Cómo funciona
La diferencia práctica importa menos que la consistencia. Las interfaces son abiertas; los alias no se reabren, aunque pueden componerse con intersecciones.
Ejemplo
interface User { id: number }
interface User { name: string }
type Status = "active" | "blocked";
const user: User = { id: 1, name: "Erick" };
console.log(user.name);
ResultadoErick
Qué está pasando
Las dos declaraciones de User se fusionan. Status usa una unión, algo que interface no expresa directamente.
Pregunta típica
¿Cuándo usarías interface y cuándo type?
Respuesta Senior
Usaría interface para contratos de objetos públicos que pueden extenderse, y type para unions, tuplas y transformaciones. En un equipo priorizaría una convención consistente.
Los mapped types recorren propiedades; los conditional types seleccionan un tipo según una relación. infer captura una parte de un tipo dentro de una condición.
10–15 min
🟢 Base🟡 Entrevista🔴 Senior
Qué debes entender
Los mapped types recorren propiedades; los conditional types seleccionan un tipo según una relación. infer captura una parte de un tipo dentro de una condición.
Cómo funciona
Son herramientas para crear APIs tipadas y utilidades reutilizables. Demasiada metaprogramación puede empeorar legibilidad y tiempos de compilación.
Ejemplo
type AsyncResult<T> = T extends Promise<infer R> ? R : T;
type Value = AsyncResult<Promise<string>>;
const value: Value = "ok";
console.log(value);
Resultadook
Qué está pasando
infer extrae string del Promise y Value termina siendo string.
Pregunta típica
¿Qué trade-off tienen los tipos demasiado avanzados?
Respuesta Senior
Pueden mejorar la API pública, pero también producir errores difíciles de leer, ralentizar el compilador y aumentar la curva de aprendizaje. Los encapsularía y documentaría.
satisfies valida compatibilidad sin reemplazar el tipo inferido. as const conserva literales y vuelve readonly de forma superficial. Una assertion no valida nada.
10–15 min
🟢 Base🟡 Entrevista🔴 Senior
Qué debes entender
satisfies valida compatibilidad sin reemplazar el tipo inferido. as const conserva literales y vuelve readonly de forma superficial. Una assertion no valida nada.
Cómo funciona
satisfies es útil en configuraciones: comprueba el contrato y mantiene claves/valores específicos para autocompletado.