All files / types deep-readonly.ts

0% Statements 0/0
0% Branches 0/0
0% Functions 0/0
0% Lines 0/0

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16                               
/**
 * Makes every property and array read-only, at every depth: a frozen configuration, a state snapshot that
 * must not be changed in place.
 *
 * @template T - The type to protect.
 * @example
 * const DEFAULTS: DeepReadonly<Settings> = { chart: { series: [] } };
 */
export type DeepReadonly<T> = T extends (...arguments_: readonly never[]) => unknown
  ? T
  : T extends readonly (infer Item)[]
    ? readonly DeepReadonly<Item>[]
    : T extends object
      ? { readonly [K in keyof T]: DeepReadonly<T[K]> }
      : T;