RecipesChapter 7: Variadic Tuple Types

Typing a promisify Function

Recipe 7.2 from The TypeScript Cookbook

function promisify<Args extends unknown[], Res>(
  fn: (...args: [...Args, (result: Res) => void]) => void
): (...args: Args) => Promise<Res> {
  return function (...args: Args) { <1>
    return new Promise((resolve) => { <2>
      function callback(res: Res) { <3>
        resolve(res);
      }
      fn.call(null, ...[...args, callback]); <4>
    });
  };
}
Open in TypeScript Playground →