Patrones
Una página por pregunta. Cada receta compila, cada resultado es el tipo que imprimió el compilador, y cada página dice dónde falla la receta.
Cada receta y cada resultado se compilan al construir el sitio
- ¿Cómo evito que un `UserId` se pase donde se esperaba un `OrderId`, si ambos son solo cadenas?TypeScript es estructural, así que dos alias de `string` son el mismo tipo. Una propiedad fantasma los hace distintos sin cambiar el valor.Marcar un primitivo
- ¿Cómo obtengo un error de compilación cuando alguien añade un caso a una unión y olvida gestionarlo?Acota cada caso y asigna lo que quede a `never`. Cuando la unión crece, lo que queda deja de ser nada y la asignación falla.Hacer exhaustivo un switch
- ¿Cómo evito que `Omit<User, "nmae">` tenga éxito en silencio y no quite nada?El integrado restringe su parámetro de clave a `keyof any`, que es toda clave que pudiera existir. Restríngelo a `keyof T` en su lugar.Hacer que Omit detecte erratas
- ¿Cómo convierto `{ a: string } & { b: number }` en `{ a: string; b: number }` para que los tooltips se lean y las comprobaciones de igualdad pasen?Un mapeo homomórfico recorre cada clave una vez y reconstruye un único objeto. Los modificadores sobreviven; la intersección no.Aplanar una intersección
- ¿Por qué `Object.keys(config)` me da `string[]` en vez de las claves que veo ahí mismo?Porque un valor puede tener más claves que las que su tipo declara, y `Object.keys` las devuelve todas. Acotar el retorno es una decisión deliberada y local — no el arreglo de un fallo.Obtener claves tipadas de un objeto
- ¿Cómo acepto un objeto de opciones donde todos los campos son opcionales pero el objeto vacío no vale?Construye una variante por clave donde esa clave es obligatoria y el resto opcionales, y únelas. Cualquier clave suministrada satisface al menos una variante.Exigir al menos una propiedad