diff options
Diffstat (limited to 'utils/types/deep-readonly.ts')
| -rw-r--r-- | utils/types/deep-readonly.ts | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/utils/types/deep-readonly.ts b/utils/types/deep-readonly.ts new file mode 100644 index 0000000..dddb6d6 --- /dev/null +++ b/utils/types/deep-readonly.ts @@ -0,0 +1,10 @@ +/** Deep-readonly version of a structural type. */ +export type DeepReadonly<T> = T extends (infer U)[] + ? ReadonlyArray<DeepReadonly<U>> + : T extends Map<infer K, infer V> + ? ReadonlyMap<DeepReadonly<K>, DeepReadonly<V>> + : T extends Set<infer U> + ? ReadonlySet<DeepReadonly<U>> + : T extends object + ? { readonly [K in keyof T]: DeepReadonly<T[K]> } + : T |
