Задача

Реализовать DeepReadonly<T> и DeepPartial<T> — рекурсивные версии Readonly/Partial, применяющие модификатор ко всем уровням вложенности.

Пример

type Config = {
    name: string;
    db: { host: string; ports: number[] };
};
 
type A = DeepReadonly<Config>;
// { readonly name: string; readonly db: { readonly host: string; readonly ports: readonly number[] } }
 
type B = DeepPartial<Config>;
// { name?: string; db?: { host?: string; ports?: number[] } }

Решение

См. также