Saltar al contenido
webtype.org#212 rebuild-pick · par 2

N.º 212 · 20 de julio de 2026 · Suave

Reconstruye Pick

Implementa `MyPick<T, K>` para que conserve solo las claves nombradas en `K`. Es el `Pick` incorporado, escrito a mano — un tipo mapeado, sin condicionales.

01

Intenta el puzle tú mismo

Par 2

Puzle

rebuild-pick.ts
interface Todo {
  title: string
  description: string
  done: boolean
}
Intento 1 de 2Aún sin comprobar

Sustituye ??? — tu solución se comprueba con los casos de abajo.

Comprobaciones

3
  • MyPick<Todo, 'title'>
    { title: string }
  • MyPick<Todo, 'title' | 'done'>
    { title: string; done: boolean }
  • MyPick<Todo, never>
    {}

Cómo se juzga una comprobación Igualdad exacta de tipos, no asignabilidad — una intersección no es lo mismo que el objeto aplanado.

Cómo le fue a todo el mundo

Nobody is counting yet. Score distribution and the juego corto board arrive with accounts — until then your results stay on this device.

Archivo
02

Solución comentada

Publicado el 21 de julio de 2026

La solución

type MyPick<T, K extends keyof T> = { [P in K]: T[P] }

El error más común

type MyPick<T, K extends keyof T> = { [P in keyof T]: T[P] }

Mapear sobre `keyof T` copia el objeto entero — `K` nunca se consulta. La cláusula tras `in` es el conjunto de claves que construyes, no del que lees.

Línea por línea

  1. { [P in K]: ... }

    `K` es una unión de claves literales. Un tipo mapeado se distribuye sobre esa unión y produce una propiedad por miembro.

  2. T[P]

    Un acceso indexado. Como `K extends keyof T`, `P` siempre es una clave real de `T`, así que esto nunca se ensancha a `unknown`.

Para recordar

Un tipo mapeado se lee `{ [Nombre in ConjuntoDeClaves]: TipoValor }`. Todo lo demás en esta ruta es una variación de esa forma.