我有一個nodejs/typescript 2項目並使用es6-promise包。 現在我想擺脫額外的包,因爲我可以直接針對打字稿中的ES6。ES6承諾/打字稿和藍鳥承諾
因此,我刪除了es6-promise軟件包,並將tsconfig.json更改爲es6目標。
{
"compilerOptions": {
"target": "es6",
// ...
}
}
許多第三方軟件包使用藍鳥承諾,但承諾的定義是不兼容的默認ES6承諾如在github
- 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 表示在不同的崗位
S o我收到以下錯誤。
TS2322:類型'藍鳥'不可分配鍵入'承諾'。屬性'[Symbol.toStringTag]'在'Bluebird'類型中缺失。
在npm @types/bluebird-global上還有其他類型的包。 在其中一篇博客文章中,用戶建議使用它而不是@types/bluebird,但某些第三方軟件包(例如,sequelize typings)引用藍鳥而不是藍鳥 - 全球,所以我得到了藍鳥缺失類型的另一個錯誤。
什麼是一個很好的解決方案,讓這個工作?
你可以嘗試在文件bluebird-patch.d.ts中加入'interface Bluebird {[Symbol.toStringTag]:string}'嗎? – Paleo
謝謝,但這不適合我。 – dknaack
最後,這些軟件包將返回Bluebird承諾,因此您應該將Bluebird軟件包和定義文件包含到您的項目中。試圖「重命名」藍鳥承諾「承諾」,就像他們是原生的承諾可能是非常混亂(即使他們有相同的API) 另外我不明白這樣做。 :) – deKajoo