【发布时间】:2017-03-09 07:57:23
【问题描述】:
我有一个 nodejs / typescript 2 项目并使用 es6-promise 包。 现在我想摆脱额外的包,因为我可以直接在 typescript 中定位 ES6。
所以我删除了 es6-promise 包并将 tsconfig.json 更改为目标 es6。
{
"compilerOptions": {
"target": "es6",
// ...
}
}
许多 3rd 方包使用 Bluebird 承诺,但承诺定义与 github 上不同帖子中所述的默认 es6 承诺不兼容
- bluebird 3.0 definifion is not assignable to ES6 Promises
- Provide a way to load Bluebird globally in es6 compilation target.
- Add Symbol.toStringTag to promise instance
所以我收到以下错误。
TS2322:“Bluebird”类型不可分配给“Promise”类型。 “Bluebird”类型中缺少属性“[Symbol.toStringTag]”。
npm @types/bluebird-global 上有一个其他类型的包。 在其中一篇博文中,用户建议使用它而不是 @types/bluebird,但一些 3rd 方包(例如,续集类型)引用了 bluebird 而不是 bluebird-global,所以我得到另一个关于 bluebird 缺少类型的错误。
什么是让它工作的好解决方案?
【问题讨论】:
-
您可以尝试将:
interface Bluebird { [Symbol.toStringTag]: string }放入文件bluebird-patch.d.ts中吗? -
谢谢,但这对我不起作用。
-
最终这些包返回给你 Bluebird 的承诺,所以你应该在你的项目中包含 Bluebird 包和定义文件。尝试像原生 Promise 一样“重命名”bluebird 承诺“Promise”可能真的很令人困惑(即使他们有相同的 API)另外我也看不到这样做。 :)
标签: javascript typescript ecmascript-6 bluebird