type NodeCallback<T> = (err: Error | null, result?: T) => void;
export function promisify<Args extends unknown[], T>(
fn: (...args: [...Args, NodeCallback<T>]) => void,
): (...args: Args) => Promise<T> {
return (...args) =>
new Promise<T>((resolve, reject) => {
fn(...args, (err, result) => {
if (err) reject(err);
else resolve(result as T);
});
});
}
// Example: fs.readFile (callback) → promise
import * as fs from 'node:fs';
const readFileP = promisify<[string, string], string>(fs.readFile);
const text = await readFileP('package.json', 'utf8');
Create a free account and build your private vault. Share publicly whenever you want.