javascript - 有没有办法在 typescript 上使用 util.promisify 继承方法签名?

标签 javascript node.js typescript

从 v8.0.0 Node 开始提供 util.promisify() API。现在我正在尝试将一些回调风格的方法转换为异步/等待风格。 在 typescript 上,util.promisify() 可能不会继承方法签名:

import fs = require('fs');

export namespace AsyncFs {
    export const lstat = util.promisify(fs.lstat);
    // there's no method signature, only shows as "Function"
}

虽然我们可以为每个方法添加新的签名...

export const lstat = util.promisify(fs.lstat) as (path: string | Buffer) => fs.Stats;

所以我正在寻找一种自动继承签名的好方法。是否可以?你有什么好的想法吗?

谢谢。

最佳答案

如果 TS 内部没有处理,那么您可能必须定义 util.promisify() 的类型你自己做类似what they do for Bluebird's promisify() static function in DefinitelyTyped的事情.

  static promisify<T>(func: (callback: (err: any, result: T) => void) => void, options?: Bluebird.PromisifyOptions): () => Bluebird<T>;
  static promisify<T, A1>(func: (arg1: A1, callback: (err: any, result: T) => void) => void, options?: Bluebird.PromisifyOptions): (arg1: A1) => Bluebird<T>;
  static promisify<T, A1, A2>(func: (arg1: A1, arg2: A2, callback: (err: any, result: T) => void) => void, options?: Bluebird.PromisifyOptions): (arg1: A1, arg2: A2) => Bluebird<T>;
  static promisify<T, A1, A2, A3>(func: (arg1: A1, arg2: A2, arg3: A3, callback: (err: any, result: T) => void) => void, options?: Bluebird.PromisifyOptions): (arg1: A1, arg2: A2, arg3: A3) => Bluebird<T>;
  static promisify<T, A1, A2, A3, A4>(func: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, callback: (err: any, result: T) => void) => void, options?: Bluebird.PromisifyOptions): (arg1: A1, arg2: A2, arg3: A3, arg4: A4) => Bluebird<T>;
  static promisify<T, A1, A2, A3, A4, A5>(func: (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5, callback: (err: any, result: T) => void) => void, options?: Bluebird.PromisifyOptions): (arg1: A1, arg2: A2, arg3: A3, arg4: A4, arg5: A5) => Bluebird<T>;

关于javascript - 有没有办法在 typescript 上使用 util.promisify 继承方法签名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44540022/

相关文章:

javascript - 从主文档的 CSP 沙箱中排除 iframe

Typescript 在 vs 2015 ctp 6 中保存时禁用编译

javascript - 缩小/丑化我的应用程序

javascript - 如何在 JavaScript 中使用 `Array#map` 中的 `Promise.all`

javascript - jQuery - 无限滚动

javascript - 使用事件发射器的简单发布/订阅系统

node.js - 带 Passport 认证的nodejs Express应用程序需要使用https

angular - angular 2 中的类型是什么?

javascript - 我确实有一个表单,其中如果用户输入内容,它应该检查负数或空输入框并抛出警报消息

javascript - Mocha 测试套件在 setInterval(...) 运行时永远不会结束