Type alias DeepReadonly<T>
DeepReadonly<T>: Readonly<{ [K in keyof T]: T[K] extends undefined | null | boolean | number | string | symbol | bigint | Function ? T[K] : T[K] extends (infer V)[] ? ReadonlyArray<DeepReadonly<V>> : T[K] extends Map<infer K, infer V> ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> : T[K] extends Set<infer V> ? ReadonlySet<DeepReadonly<V>> : DeepReadonly<T[K]>}>