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.