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

标签 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 的模块了。
  • 使用带有 AMD 模块的 ES6 导入,设置 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
  • 与前一点相同,使用这样的 shim:requirejs.config({shim: { bluebird: { exports: "Promise"}}}): exception from uncaught JavaScript throw: Error: Mismatched anonymous define() module 和错误消息中的 Bluebird 的整个代码。
  • 修补 Bluebird 定义文件:在 ES6 模式下不允许:后续变量声明必须具有相同的类型。

我觉得我为这样一个看似简单的请求浪费了太多时间,所以我会尝试询问 StackOverflow :)

最佳答案

如果像我一样,您认为使用 Promise.resolve() 强制执行 Bluebird promise 似乎违背了 Bluebird 的既定目的(“零开销抽象”、“无处不在”、“规范兼容”、...)并将 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了解更多背景信息。

关于typescript - 如何在当前的 TypeScript 中使用 Bluebird?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39231151/

相关文章:

typescript - "Cannot find name ' ServiceWorkerRegistration 使用Typescript创建firebase云函数时出现'"错误

javascript - 带事件发射器的触发功能

javascript - 用 promise 从失败中恢复过来

javascript - requirejs 模块的许多新实例

amd - 如何将多个 AMD 模块捆绑在一个文件中?

javascript - requirejs - 多次调用 require 的性能

node.js - TypeORM全局创建连接

typescript - Visual Studio 会提示 typescript 错误,而 tsc 和 eslint 则不会

node.js - 是否仍然需要 promise MongoDB 驱动程序?

javascript - 使用 Promise 等待多个 Map 方法返回,然后获取所有 Map 返回值