我只是不明白。一旦这相对容易,我从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的情况下工作。
到目前为止,我已尝试过:
outFile
以获取我的代码包,然后按顺序包含文件:almond.js,bluebird.js,my-code.js和一些需要的代码主模块所以运行任何东西:Error: See almond README: incorrect module build, no module name
(显然我从官方页面下载的bluebird.js
没有在AMD中定义名称,我应该自己构建它还是什么......?)missing bluebird
。requirejs.config({shim: { bluebird: { exports: "Promise" }}})
:exception from uncaught JavaScript throw: Error: Mismatched anonymous define() module
以及错误消息中Bluebird的完整代码。Subsequent variable declarations must have the same type.
我觉得我浪费了太多时间来处理如此简单的请求,所以我会尝试询问StackOverflow:)
答案 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)
})