如何在当前的 TypeScript 中使用 Bluebird?
How to use Bluebird with current TypeScript?
我只是不明白。一旦这相对容易,我就从 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 的模块了。
- 使用带有 AMD 模块的 ES6 导入,设置
outFile
以获取我的代码包,然后按以下顺序包含文件:almond.js、bluebird.js、my-code.js 和一些需要主模块的代码所以 运行s: 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.
我觉得我为这样一个看似简单的请求浪费了太多时间,所以我会尝试询问 Whosebug :)
不使用 DT 中的全局声明文件,现在认为最好的做法是使用 typings,导入模块声明文件。
例如。对于蓝鸟,你可以 typings install bluebird
。这段代码对我来说编译得很好:
import Promise = require('bluebird')
Promise.resolve("foo").then(function (msg) {
console.log(msg)
})
如果像我一样,您认为使用 Promise.resolve()
到 cast/coerce 蓝鸟承诺似乎都违背了 Bluebird 的既定目的(“零开销抽象”,“运行everywhere”, “Spec compatible”, ...) 并将 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。
我只是不明白。一旦这相对容易,我就从 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 的模块了。
- 使用带有 AMD 模块的 ES6 导入,设置
outFile
以获取我的代码包,然后按以下顺序包含文件:almond.js、bluebird.js、my-code.js 和一些需要主模块的代码所以 运行s: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.
我觉得我为这样一个看似简单的请求浪费了太多时间,所以我会尝试询问 Whosebug :)
不使用 DT 中的全局声明文件,现在认为最好的做法是使用 typings,导入模块声明文件。
例如。对于蓝鸟,你可以 typings install bluebird
。这段代码对我来说编译得很好:
import Promise = require('bluebird')
Promise.resolve("foo").then(function (msg) {
console.log(msg)
})
如果像我一样,您认为使用 Promise.resolve()
到 cast/coerce 蓝鸟承诺似乎都违背了 Bluebird 的既定目的(“零开销抽象”,“运行everywhere”, “Spec compatible”, ...) 并将 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。