/** Base callback */ export interface Callback { (...args: any[]): any } /** Base debounce */ export interface Debounce { (func: T): T } /** Size */ export interface Size { width: number height: number } type ArgumentTypes any> = F extends (...args: infer A) => any ? A : never export type Promisify = { [K in keyof T]: T[K] extends (...args: any[]) => any ? (...args: ArgumentTypes) => Promise> : T[K] extends object ? Promisify : T[K] }