Solución comentada
Publicado el 31 de agosto de 2026La solución
type OmitByType<T, U> = { [K in keyof T as T[K] extends U ? never : K]: T[K] }El error más común
type OmitByType<T, U> = { [K in keyof T]: T[K] extends U ? never : T[K] }Esto filtra el valor y deja la clave en pie. a sigue ahí, ahora con tipo never — una propiedad para la que nadie podrá aportar jamás un valor, que no es lo mismo que una propiedad inexistente. Filtrar del lado del valor puede vaciar una clave; no puede borrarla.
Línea por línea
as T[K] extends U ? never : KLa cláusula
asrenombra la clave que se está produciendo. Renombrarla aneveres la única forma de que un tipo mapeado no emita ninguna propiedad en esa iteración.OmitByType<{ a: 1; b: 2 }, never>Aquí no se descarta nada, porque
1 extends neveres falso.neveres el conjunto vacío: ningún tipo le es asignable, así que ninguna clave coincide y todo sobrevive.
Para recordar
Las claves se eliminan en la cláusula de clave, nunca en la de valor. Si acabas produciendo never como tipo de una propiedad, casi seguro querías no producir propiedad alguna.

