typescript - Promise 类型中最终缺少属性

标签 typescript es6-promise finally

我很确定我可以自己解决这个问题,但如果它可以帮助其他人,我想分享并节省其他人的时间。

我必须添加 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 对象,而不是继续从中导入 Promisees6-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/

相关文章:

typescript - 如何在带有 Typescript 项目的 React Native 中使用 AWS Amplify?

visual-studio-2013 - Typescript 扩展在 Visual Studio 2013 中不起作用

javascript - promise 如何与#then 和#json 一起使用?

javascript - Promise 与函数的链接

使用 try catch 的 Java 异常处理

c++ - 终止 worker

java - 可以捕获 Throwable 来执行清理吗?

css - 覆盖组件 HTML/在第三方组件上添加或删除 css

使用保留名称的 typescript 命名空间声明

javascript - 无序执行的 Promise 链