UNPKG

@flex-development/tutils

Version:
18 lines (17 loc) 1.07 kB
/** * @file Type Definitions - DeepRequired * @module tutils/types/DeepRequired */ import type BuiltIn from './built-in.mjs'; import type ObjectUnknown from './object-unknown.mjs'; /** * Recursive version of [`Required`][1]. * * [1]: https://typescriptlang.org/docs/handbook/utility-types.html#requiredtype * * @see https://github.com/sindresorhus/type-fest/blob/main/source/basic.d.ts */ declare type DeepRequired<T> = T extends BuiltIn ? NonNullable<T> : T extends Map<infer K, infer V> ? Map<DeepRequired<K>, DeepRequired<V>> : T extends ReadonlyMap<infer K, infer V> ? ReadonlyMap<DeepRequired<K>, DeepRequired<V>> : T extends WeakMap<infer K, infer V> ? WeakMap<DeepRequired<K>, DeepRequired<V>> : T extends Set<infer U> ? Set<DeepRequired<U>> : T extends ReadonlySet<infer U> ? ReadonlySet<DeepRequired<U>> : T extends WeakSet<infer U> ? WeakSet<DeepRequired<U>> : T extends Promise<infer U> ? Promise<DeepRequired<U>> : T extends ObjectUnknown ? { [K in keyof T]-?: DeepRequired<T[K]>; } : NonNullable<T>; export { type DeepRequired as default };