如何将Bluebird与当前TypeScript一起使用?

时间:2016-08-30 15:09:01

标签: typescript bluebird amd

我只是不明白。一旦这相对容易,我从DefinitelyTyped下载了片段,它假设它是全局声明的,我添加了脚本并且它有效。现在似乎我没有其他选择来使用复杂的包管理器和异步加载系统,可能还有一个优化器用于生产。

理想情况下,我只想要一些像这样的TypeScript代码

// maybe some import?
Promise.resolve("foo").then(function(msg) { 
    console.log(msg);
}

编译成这样的JavaScript:

Promise.resolve("foo").then(function(msg) { 
    console.log(msg);
}

我希望它能够在浏览器中运行,或者在像Rhino这样的最小环境中运行。如果需要,我可以包括require.js,almond.js,使用browserify构建或者其他什么,但我希望它能够在不需要XHR的情况下工作。

到目前为止,我已尝试过:

  • 使用全局(环境)模块:找不到Bluebird了。
  • 使用ES6导入AMD模块,设置outFile以获取我的代码包,然后按顺序包含文件:almond.js,bluebird.js,my-code.js和一些需要的代码主模块所以运行任何东西:Error: See almond README: incorrect module build, no module name(显然我从官方页面下载的bluebird.js没有在AMD中定义名称,我应该自己构建它还是什么......?)
  • 与使用完整require.js的前一点相同:missing bluebird
  • 与前一个点相同的是这样的垫片:requirejs.config({shim: { bluebird: { exports: "Promise" }}})exception from uncaught JavaScript throw: Error: Mismatched anonymous define() module以及错误消息中Bluebird的完整代码。
  • 修补Bluebird定义文件:在ES6模式下不允许:Subsequent variable declarations must have the same type.

我觉得我浪费了太多时间来处理如此简单的请求,所以我会尝试询问StackOverflow:)

2 个答案:

答案 0 :(得分:4)

如果像我一样,你认为使用Promise.resolve()施放/强制蓝鸟的承诺似乎都违背了Bluebird的陈述目的(“零开销抽象”,“到处运行”,“ Spec兼容“,...”并将TypeScript带到一个麻烦的临界点,考虑使用@types/bluebird-global如下:

npm install --save-dev @types/bluebird-global

在主入口点导入一次。

// The same Promise API, everywhere.
import * as Promise from 'bluebird'
global.Promise = Promise

有关更多背景信息,请参阅DefinitelyTyped issue #11027

答案 1 :(得分:3)

现在,不再使用DT的全局声明文件,而是使用typings代替导入模块声明文件的最佳做法。

EG。对于蓝鸟,你可以typings install bluebird。这段代码对我很好:

import Promise = require('bluebird')
Promise.resolve("foo").then(function (msg) {
  console.log(msg)
})