Loi*_*nen 7 finally typescript es6-promise
我很确定自己可以解决这个问题,但是如果它可以帮助其他人,我想分享并节省其他人的时间。
我必须添加es6-promise库才能摆脱此错误
Promise only result to a type, but is only used as a value here.
Run Code Online (Sandbox Code Playgroud)
当我尝试使用Promise.all时(请参阅此讨论)。到现在为止,它运行良好,尝试使用MongoDB中的Promise时出现错误。
Promise<whatever> is not assignable to Promise<any>
Property 'finally' is missing in type Promise<whatever>
Run Code Online (Sandbox Code Playgroud)
根据es6-promise上的这个问题(如果我没做错的话),新的finally属性将破坏兼容性。它在Promise Mongo退货单上存在,但不在我从es6-promise导入的那张上。
任何的想法?
我是注意到finally垫片在该链接问题上破坏了 Promise 兼容性的人。很高兴看到这得到了一些关注。以下是一些选项:
tsconfig.json
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost", "es2018.promise"]
}
}
Run Code Online (Sandbox Code Playgroud)
安装 shim,在应用程序启动时运行一次 polyfill,然后使用全局Promise对象,而不是继续Promise从es6-promise. 我发现这是最具互操作性的方式。
npm install --save es6-promise@latest
Run Code Online (Sandbox Code Playgroud)
请注意,es6-promise在最近的几个版本中,它捆绑了自己的类型,这些类型与 TypeScript 的内置Promise库的类型冲突。
es6-promise不包含finally垫片的旧版本注意:当然这意味着你不能使用 finally
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost"]
}
}
Run Code Online (Sandbox Code Playgroud)
es6-promise在他们引入之前安装最后一个版本finally,并使用这些类型:
npm install --save es6-promise@4.2.2 && npm install --save-dev @types/es6-promise@0.0.32
Run Code Online (Sandbox Code Playgroud)
(或者以其他方式省略这些类型并添加es2015.promise到您的compilerOptions.lib数组中tsconfig.json。)
如果您需要的只是 a 的正确类型定义,Promise那么您可以只使用 typescript 附带的内置定义(我这样说是因为您注意到您实际使用的 Promise 具有finally预期的方法)。
为此,请删除es6-promise您的项目并将tsconfig您的库更改为:
{
....
"lib": ["es5","es2015.promise","dom", "scripthost"]
....
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5567 次 |
| 最近记录: |