Solución comentada
Publicado el 19 de agosto de 2026La solución
type PickByType<T, U> = { [K in keyof T as T[K] extends U ? K : never]: T[K] }
El error más común
type PickByType<T, U> = { [K in keyof T]: T[K] extends U ? T[K] : never }
El filtrado ocurre del lado del valor, así que todas las claves sobreviven — las rechazadas solo contienen never. PickByType<Mixed, number> queda como { id: number; name: never; active: never; score: number }, un tipo muy distinto del pedido y prácticamente inservible.
Línea por línea
as T[K] extends U ? K : neverLa cláusula
asreescribe cada clave mientras se ejecuta el mapeo. Aquí la reescritura es condicional: conserva la clave cuando el valor encaja, o renómbrala anevercuando no.neverUna clave de tipo
neverno puede existir, así que TypeScript omite la propiedad en vez de crear una imposible. Esa regla silenciosa es lo que convierte el renombrado de claves en un filtro.
Para recordar
Filtrar un tipo objeto ocurre en la cláusula de clave, nunca en el valor. as ... : never es la única forma de hacer que una propiedad desaparezca de verdad.

