import { type NonNever } from 'ts-essentials'; /** * A null/undefined value. */ export type MaybeNot = null | undefined; /** * A non-null/undefined/void value. */ export type MaybeSo = T extends MaybeNot | void ? never : T; /** * A value that might exist, or be null/undefined instead. */ export type Maybe = T | MaybeNot; /** * A value that is not null/undefined. */ export type MaybeSoStrict = T extends Maybe ? (A extends Maybe ? (B extends Maybe ? (C extends Maybe ? (D extends Maybe ? E : D) : C) : B) : A) : T; /** * Turns all key values in an object into a Maybe value. */ export type MaybeMap = NonNever<{ [K in keyof T]: T[K] extends MaybeNot ? never : Maybe; }>;