export type DeepReadonly = T extends (...args: any[]) => any ? T : T extends Array ? ReadonlyArray> : T extends object ? { readonly [P in keyof T]: DeepReadonly } : T;