export type OptionalPromise = T | Promise export type Optional = { [P in keyof T]?: T[P] } /** convert all keys to one type */ export type Uniform = { [P in keyof T]?: N } /** get return type of function, resolve a promise, etc */ export type Unpack = T extends (infer U)[] ? U : T extends (...args: any[]) => infer U ? U : T extends Promise ? U : T