如何在当前的TypeScript中使用Bluebird?

Ali*_*cia 4 amd typescript bluebird

我就是不明白。一旦这相对容易,我就从DefinitelyTyped下载了该代码段,假设它是全局声明的,我添加了脚本并开始工作。现在看来,我别无选择,只能使用复杂的程序包管理器和异步加载系统,并可能带有用于生产的优化程序。

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

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

像这样编译成一些JavaScript:

Promise.resolve("foo").then(function(msg) { 
    console.log(msg);
}
Run Code Online (Sandbox Code Playgroud)

我希望它能够在浏览器中或像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 :)

小智 5

如果像我一样,你认为使用Promise.resolve()投/裹胁青鸟承诺,好像它都失败的既定目的蓝鸟(“零开销抽象”,“到处奔走”,“规格兼容”,...),并带来了打字稿,以一个繁琐的转折点,请考虑@types/bluebird-global如下使用:

npm install --save-dev @types/bluebird-global
Run Code Online (Sandbox Code Playgroud)

在您的主要入口点中将其导入一次。

// The same Promise API, everywhere.
import * as Promise from 'bluebird'
global.Promise = Promise
Run Code Online (Sandbox Code Playgroud)

有关更多上下文,请参见DefinitelyTyped问题#11027

  • 我尝试了这个,但现在得到:`类型'typeof Bluebird'缺少类型'Function'中的以下属性:apply,call,bind,length,还有4个。`Bluebird 3.7.2,bluebird-global 3.5.12 (3认同)

Pel*_*obs 3

现在,最好的做法是使用类型化,导入模块声明文件,而不是使用 DT 中的全局声明文件。

例如。对于蓝鸟,你可以typings install bluebird。这段代码对我来说编译得很好:

import Promise = require('bluebird')
Promise.resolve("foo").then(function (msg) {
  console.log(msg)
})
Run Code Online (Sandbox Code Playgroud)

  • “现在认为最好的做法是使用打字来代替” - 我的印象是这不再是真的。我对么? (2认同)