typescript typescript2.1

Parcial Recursivo<T> en TypeScript 2.1



typescript2.1 (2)

Con el aterrizaje de tipos condicionales en 2.8, ahora podemos declarar un tipo parcial recursivo de la siguiente manera.

type RecursivePartial<T> = { [P in keyof T]?: T[P] extends (infer U)[] ? RecursivePartial<U>[] : T[P] extends object ? RecursivePartial<T[P]> : T[P]; };

Referencia:

http://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-8.html

Tengo esta interfaz:

export interface UserSettings { one: { three: number; four: number; }; two: { five: number; six: number; }; }

... y quiero convertirlo en esto:

export interface UserSettingsForUpdate { one?: { three?: number; four?: number; }; two?: { five?: number; six?: number; }; }

... pero Partial<UserSettings> produce esto:

{ one?: { three: number; four: number; }; two?: { five: number; six: number; }; }

¿Es posible usar tipos mapeados para que todas las propiedades en todas las profundidades sean opcionales, o tengo que crear una interfaz manualmente para eso?


Podrías hacer tu propio tipo de mapeo, así:

type RecursivePartial<T> = { [P in keyof T]?: RecursivePartial<T[P]>; };

Desafortunadamente, esto no funciona para los campos de tipo de matriz. Tampoco parece haber una manera de hacer mapeo de tipo condicional; Es decir, límite a primitivas. Consulte https://github.com/Microsoft/TypeScript/pull/12114#issuecomment-259776847 Ahora es posible, vea otra respuesta.