00009
DeepReadonly
type IsFunction<T> = T extends (..._:any[])=>any ? true : false;
type DeepReadonly<T extends object> = Readonly<{[K in keyof T]: T[K] extends string|boolean ? T[K] : IsFunction<T[K]> extends true ? T[K]: DeepReadonly<Readonly<T[K]>> }>