utils.ts 764 B

123456789101112131415161718192021222324
  1. export type Nullable<T> = T | null
  2. // eslint-disable-next-line no-use-before-define, @typescript-eslint/no-empty-interface
  3. interface DeepReadonlyArray<T> extends ReadonlyArray<DeepReadonly<T>> {}
  4. type DeepReadonlyObject<T> = {
  5. readonly [P in keyof T]: DeepReadonly<T[P]> // eslint-disable-line no-use-before-define
  6. }
  7. export type DeepReadonly<T> = T extends (infer R)[]
  8. ? DeepReadonlyArray<R>
  9. : T extends (...args: any[]) => void
  10. ? T
  11. : T extends object
  12. ? DeepReadonlyObject<T>
  13. : T
  14. export type DeepPartial<T> = Partial<{ [P in keyof T]: DeepPartial<T[P]> }>
  15. export type MergeAndOverride<Parent, Own> = Own & Omit<Parent, keyof Own>
  16. export type Entries<T extends object> = [keyof T, T[keyof T]][]
  17. export type Keys<T extends object> = (keyof T)[]