export type Callback = (e: any, res?: T) => void; function promisify(fn: (cb: Callback) => any): () => Promise; function promisify(fn: (p1: T1, cb: Callback) => any): (a1: T1) => Promise; function promisify(fn: (p1: T1, p2: T2, cb: Callback) => any): (a1: T1, a2: T2) => Promise; function promisify( fn: (p1: T1, p2: T2, p3: T3, cb: Callback) => any ): (a1: T1, a2: T2, a3: T3) => Promise; function promisify( fn: (p1: T1, p2: T2, p3: T3, p4: T4, cb: Callback) => any ): (a1: T1, a2: T2, a3: T3, a4: T4) => Promise; /** * Promisify a callback function */ function promisify(func: any) { return (...args: any[]) => new Promise((resolve, reject) => { const cb: Callback = (err, result) => (err ? reject(err) : resolve(result)); func.apply(null, [...args, cb]); }); } export default promisify;