我很确定我可以自己解决这个问题,但如果它可以帮助其他人,我想分享并节省其他人的时间。
我必须添加 es6-promise
库来消除这个错误
Promise only result to a type, but is only used as a value here.
当我尝试使用 Promise.all 时(参见 this discussion )。直到现在它运行良好,当我尝试使用来自 MongoDB 的 Promise 时出现错误。
Promise<whatever> is not assignable to Promise<any>
Property 'finally' is missing in type Promise<whatever>
根据 this issue on es6-promise (如果我没记错的话),新的 finally 属性破坏了兼容性。它存在于 Promise Mongo 返回值中,但不存在于我从 es6-promise 导入的返回值中。
有什么想法吗?
最佳答案
我注意到 finally
shim 破坏了 Promise 在 linked issue 上的兼容性.很高兴看到这得到一些关注。以下是一些选项:
1。完全依赖 TypeScript 核心库的类型
tsconfig.json
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost", "es2018.promise"]
}
}
安装 shim,在应用启动时运行一次 polyfill,然后使用全局 Promise
对象,而不是继续从中导入 Promise
类es6-promise
。我发现这是最具互操作性的方式。
npm install --save es6-promise@latest
请注意,在最近的几个版本中,es6-promise
一直在捆绑自己的类型,这些类型与 TypeScript 的内置 Promise
库的类型冲突。
2。使用旧版本的 es6-promise
不包含 finally
shim
注意:当然这意味着你不能使用finally
{
"compilerOptions": {
"lib": ["DOM","ES5","ScriptHost"]
}
}
在引入 finally
之前安装最新版本的 es6-promise
,并使用这些类型:
npm install --save es6-promise@4.2.2 && npm install --save-dev @types/es6-promise@0.0.32
(或者以其他方式省略这些类型并将 es2015.promise
添加到 tsconfig.json
中的 compilerOptions.lib
数组。)
关于typescript - Promise 类型中最终缺少属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51174725/