Formas de objeto
Partial
Hace opcional cada propiedad de un objeto, un nivel de profundidad.
Qué es
Un tipo mapeado homomórfico que añade `?` a cada clave. Como el mapeo recorre `keyof T` para un parámetro de tipo desnudo, conserva todo lo demás que encuentra — `readonly` sobrevive y un array sigue siendo un array. Es la primera utilidad que casi todos conocen y la que más se usa cuando se quería algo más profundo.
Ejemplos
Partial<{ a: string; b: number }>→{ a?: string | undefined; b?: number | undefined; }Partial<{ readonly a: string }>→{ readonly a?: string | undefined; }`readonly` sobrevive, porque el mapeo es homomórfico.
Partial<{ a: { b: string } }>→{ a?: { b: string; } | undefined; }Y `b` queda intacto. Un nivel, siempre.
Cada tipo resuelto de arriba lo imprimió TypeScript 5.9.3, no se escribió a mano.
Lo que no hace
- No es profundo. Los objetos anidados mantienen todas sus propiedades obligatorias, la sorpresa más común de esta lista.
- Opcional no es lo mismo que «puede ser undefined». Con `exactOptionalPropertyTypes` son tipos distintos, y `Partial` produce el primero.
Conclusión
Usa `Partial` sobre la forma que realmente asignas, no sobre todo el árbol. Si quieres el árbol, la recursión tienes que escribirla tú.