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
UserIdse pase donde se esperaba unOrderId, si ambos son solo cadenas?TypeScript es estructural, así que dos alias destringson 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 akeyof any, que es toda clave que pudiera existir. Restríngelo akeyof Ten 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 dastring[]en vez de las claves que veo ahí mismo?Porque un valor puede tener más claves que las que su tipo declara, yObject.keyslas 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
- ¿Cómo leo
user.address.citymediante una ruta reutilizable sin perder el tipo del resultado?Genera recursivamente las tuplas de claves válidas y consume una clave cada vez para calcular el valor final.Obtener un valor por una ruta profunda tipada - ¿Cómo mantengo cada nombre de evento emparejado con su carga y listener correctos?Usa un mapa de eventos y un parámetro de clave para que el nombre seleccione la carga en ambos métodos.Tipar un emisor de eventos
- ¿Cómo hago que los datos de éxito solo estén disponibles en la rama de éxito y los errores en la de fallo?Da a cada variante un campo literal compartido. Comprobarlo estrecha el objeto entero, no solo el campo.Modelar estados que se estrechan
- ¿Cómo permito que quien llama elija entrada y transformación sin escribir argumentos de tipo?Coloca los parámetros de tipo donde los valores los revelan: uno en el elemento del array y otro en el retorno del callback.Inferir un resultado genérico desde un callback
- ¿Cómo acepto
hrefuonClickpero rechazo objetos que proporcionan ambos?Une las dos formas y añade las claves únicas del otro lado como propiedades opcionalesnever.Hacer dos formas de props mutuamente excluyentes - ¿Cómo acepto una clave de búsqueda rechazando tanto una consulta vacía como una con varias claves?Construye una variante por clave: exige esa clave y prohíbe las demás con
neveropcional.Exigir exactamente una propiedad - ¿Cómo obtengo solo las claves cuyas propiedades son cadenas, funciones u otro tipo elegido?Mapea cada clave a sí misma o a
nevere indexa el objeto para recoger las supervivientes.Seleccionar claves por su tipo de valor - ¿Cómo evito mutaciones bajo el primer nivel en vez de congelar solo el tipo del objeto exterior?Conserva funciones, recorre arrays y mapea cada propiedad del objeto con el modificador readonly.Hacer un objeto profundamente de solo lectura
- ¿Cómo evito que una unión literal y el array u objeto usado en ejecución se desincronicen?Mantén un valor como fuente de verdad, conserva sus literales con
as consty consulta su tipo.Derivar una unión desde datos de ejecución - ¿Cómo conservo la relación entre cada clave y su valor al iterar
Object.entries?Construye una unión de tuplas clave/valor con un tipo mapeado y encierra la aserción inevitable en un ayudante.Obtener entradas tipadas de un objeto - ¿Cómo hago que un ayudante infiera una tupla literal sin exigir
as const?Marca el parámetro comoconst; la inferencia preferirá formas literales readonly frente a arrays y primitivos ampliados.Conservar literales con un genérico const - ¿Cómo acepto callbacks que devuelven
ToPromise<T>y expongo siempre un resultado predecible?Acepta un valor o promesa, espéralo y describe el resultado aplanado conAwaited.Normalizar un callback síncrono o asíncrono - ¿Cómo selecciono una propiedad de cada objeto y conservo su tipo en el array devuelto?Vincula la clave a
keyof Ty usa acceso indexado para el elemento de retorno.Extraer una propiedad tipada de objetos - ¿Cómo indexo una unión discriminada por su
kinden vez de extraer miembros repetidamente?Mapea la unión y remapea cada miembro al valor literal de su discriminante.Convertir una unión en mapa de consulta

