import { Primitive } from './primitive'; /** * 深度设置readonly * @example * 输入: * type Example = { * first: { * second: { * name: string; * }; * }; * }; * type example = DeepReadonly * 输出: * type example = { * readonly first: { * readonly second: { * readonly name: string; * }; * }; * } */ export type DeepReadonly = T extends ((...args: any[]) => any) | Primitive ? T : T extends DeepReadonlyArray ? DeepReadonlyArray : T extends DeepReadonlyObject ? DeepReadonlyObject : T; export interface DeepReadonlyArray extends ReadonlyArray> { } export type DeepReadonlyObject = { readonly [P in keyof T]: DeepReadonly; };