vtils

Home > types > NonNullableDeep

NonNullableDeep type

Like NonNullable but recursive

Signature:

export declare type NonNullableDeep<T> = T extends Builtin
  ? NonNullable<T>
  : T extends Map<infer K, infer V>
  ? Map<NonNullableDeep<K>, NonNullableDeep<V>>
  : T extends ReadonlyMap<infer K, infer V>
  ? ReadonlyMap<NonNullableDeep<K>, NonNullableDeep<V>>
  : T extends WeakMap<infer K, infer V>
  ? WeakMap<NonNullableDeep<K>, NonNullableDeep<V>>
  : T extends Set<infer U>
  ? Set<NonNullableDeep<U>>
  : T extends ReadonlySet<infer U>
  ? ReadonlySet<NonNullableDeep<U>>
  : T extends WeakSet<infer U>
  ? WeakSet<NonNullableDeep<U>>
  : T extends Promise<infer U>
  ? Promise<NonNullableDeep<U>>
  : T extends {}
  ? {
      [K in keyof T]: NonNullableDeep<T[K]>;
    }
  : NonNullable<T>;

References: NonNullableDeep