conditonal-types.ts 403 B

12345678910
  1. export type DeepReadonly<T> = T extends any[] ? DeepReadonlyArray<T[number]> : T extends object ? DeepReadonlyObject<T> : T;
  2. type NonFunctionPropertyNames<T> = { [K in keyof T]: T[K] extends Function ? never : K }[keyof T];
  3. interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {}
  4. type DeepReadonlyObject<T> = {
  5. readonly [P in NonFunctionPropertyNames<T>]: DeepReadonly<T[P]>;
  6. };