蓝鸟和es6承诺打字稿

时间:2017-10-07 21:31:35

标签: typescript promise bluebird typescript-typings

我开始了一个新项目,我想使用TypeScript而不是纯Javascript。我正在努力将Bluebird与第三方库结合使用。

请参阅以下示例:

  import * as Promise from 'bluebird'

  private requestPlayerProfile(playerTag:string):Promise<IPlayerProfile> {
    const requestOptions = Object.create(this.options)    
    return this.limiter.schedule(request, requestOptions)
  }

问题:limiter是第三方库的一个实例,limiter.schedule显然返回原生承诺,而我在我的应用程序的其余部分使用Bluebird承诺。我如何妥善处理此类案件?

  

[ts]类型'承诺'不能分配给类型   “蓝鸟”。 “当时”的财产类型是   不兼容。

1 个答案:

答案 0 :(得分:3)

@Filipe正在正确解释错误消息。

  • this.limiter.schedule(...)返回的对象类型是什么,该类型与bluebird.Promise<IPlayerProfile>不兼容。
  • 没有人能够可靠地假设limiter.schedule(...)返回“vanila”,即本机Promise<IPlayerProfile>对象。您可以通过转到定义schedule(...)的源代码轻松找到它。在我的Visual Studio代码中,我使用 F12 来实现目标。注意那里对象的精确返回类型。
  • 根据返回的确切内容,您有两个主要选择:
    1. 在代码中的任何地方使用该承诺类型,而不是完全依赖bluebird的承诺;或
    2. Convert that promise type to a bluebird one。我没有尝试过,但以下情况应该有效:return Promise.resolve(this.limiter.schedule(request, requestOptions))(见http://bluebirdjs.com/docs/api/promise.resolve.html)。

我希望它有所帮助。