export type AnyToNever = any extends T ? never : T; export type MaybePromise = T | Promise; export type MaybeArray = T | T[]; export type Simplify = { [KeyType in keyof T]: T[KeyType]; } & {}; export type AnyFunction = (...args: any[]) => any; export type Values = T[keyof T]; export type Truthy = T extends false | '' | 0 | null | undefined ? never : T; /** * Removes all `readonly` flags on a type (non-recursively), making it effectively mutable * * Considered unsafe as removing `readonly` modifiers may break semantics in some cases */ export type UnsafeMutable = { -readonly [P in keyof T]: T[P]; };