ES6 Promise / Typescript 和 Bluebird Promise

2024-03-13

我有一个 nodejs / typescript 2 项目并使用es6-promise https://github.com/stefanpenner/es6-promise包裹。 现在我想摆脱额外的包,因为我可以直接在打字稿中定位 ES6。

所以我删除了 es6-promise 包并将 tsconfig.json 更改为目标 es6。

{
  "compilerOptions": {
    "target": "es6",
    // ...
  }
}

许多第 3 方包使用 Bluebird Promise,但 Promise 定义与默认的 es6 Promise 不兼容,如 github 上不同帖子所述

  • bluebird 3.0 定义不可分配给 ES6 Promises https://github.com/DefinitelyTyped/DefinitelyTyped/issues/11027
  • 提供一种在 es6 编译目标中全局加载 Bluebird 的方法。 https://github.com/Microsoft/TypeScript/issues/12382
  • 将 Symbol.toStringTag 添加到 Promise 实例 https://github.com/petkaantonov/bluebird/issues/1277

所以我收到以下错误。

TS2322:类型“Bluebird”不可分配给类型“Promise”。 “Bluebird”类型中缺少属性“[Symbol.toStringTag]”。

npm 上还有其他类型的包@types/bluebird-global https://www.npmjs.com/package/@types/bluebird-global。 在一篇博客文章中,用户建议使用它而不是@类型/蓝鸟 https://www.npmjs.com/package/@types/bluebird但一些第 3 方软件包(例如,sequelizetypings)引用了 bluebird 而不是 bluebird-global,因此我收到另一个错误,因为缺少 bluebird 的类型。

让它发挥作用的好解决方案是什么?


我正在处理

TS2322:类型“Bluebird”不可分配给类型“Promise”。 “Bluebird”类型中缺少属性“[Symbol.toStringTag]”。

并找到了这个线程:https://github.com/DefinitelyTyped/DefinitelyTyped/issues/10801 https://github.com/DefinitelyTyped/DefinitelyTyped/issues/10801

TL;DR;它的版本是执行以下操作之一:

  1. 在每个 .ts 条目文件中添加以下内容以覆盖全局承诺:

    import * as Bluebird from 'bluebird';

    declare global { export interface Promise<T> extends Bluebird<T> {} }

Or

  1. 将所有 Promise 包装在 Bluebird Promise 构造函数中。这里有一些运行时开销,它在 Bluebird 网站上被列为反模式。

顺便说一句,我无法让第二个选项起作用,但第一个选项对我来说效果很好。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

ES6 Promise / Typescript 和 Bluebird Promise 的相关文章

随机推荐

  • 如何在保留颜色的同时将 Mat 对象转换为位图?

    在我正在开发的应用程序中 我使用打开相机OpenCV4Android using CameraBridgeViewBase CvCameraViewListener2当我触摸屏幕时 我将该框架设置为内部的图像ImageView如下代码所示
  • 检测用户退出站点

    我迫切希望检测用户何时离开我的网站 以便准确记录相关用户的会话长度 我想到了几个可能的解决方案 我首先想到我可以使用 onbeforeunload 并发送一个简单的 ajax 来记录最后一个活动 但实践告诉我 onbeforeunload
  • 为什么 x64 项目使用默认的打包对齐方式 16?

    如果您在 VS2012 的 x64 项目中编译以下代码而不使用任何 Zp 标志 pragma pack show 然后编译器会吐出 value of pragma pack show 16 如果项目使用Win32 编译器会输出 value
  • 如何让 Google 表格脚本在特定单元格的值发生变化时发送电子邮件?

    我正在尝试为我的 Google 表格设置一个脚本 该脚本将在特定单元格的值发生更改时发送电子邮件 我还想知道是否有办法设置脚本 使其每天只发送一次 例如 如果一天进行多次更改 我宁愿它在一天结束时只发送一封电子邮件 而不是每次都发送一封电子
  • 我如何从android中的php服务器获取这个json数据

    我如何在android中获取这个json数据 该数据位于本地主机中 我必须使用 URL 获取此数据并在 android 的列表视图中显示 任何人都可以帮助编码吗 id 111114 name Prandar id 111115 name C
  • 将 C# 函数指针传递到 C++/CLI 互操作 dll

    我试图将函数指针从 C 传递到 C CLI 并收到一个 Windows 编译器错误 指出ManagedTakeCallback该语言 C 不支持函数 我定义了ManagedTakeCallback在 C CLI 互操作中 我的代码看起来像
  • 将 ASP.NET 行添加到 ListBox

    我需要在 ASP NET 中的列表框中添加一行 以便与用户可以选择的许多选项进行一定的分离 目前 我们有超过 20 个不同的选项供用户选择 我需要将最受欢迎的放在最上面 我的逻辑是将流行的选项放在顶部 但认为列表框中的一行将帮助用户将它们与
  • 无法使用 Selenium WebDriver 在 Chrome 中加载默认配置文件

    我正在使用 Selenium WebDriver 在需要 http 身份验证的页面上执行某些操作 我已经登录我的默认配置文件 但 selenium chromedriver 会自动为每次使用使用新的配置文件 因此我无法通过身份验证阶段 因此
  • libcurl 回调 w/c++ 类成员

    取自libcurl 编程教程 http curl haxx se libcurl c libcurl tutorial html在 libcurl 网站上 libcurl 与 C 使用 C 时基本上只需要记住一件事 在连接 libcurl
  • 未注入通过 RequireJS 从 CDN 加载 Angular

    在我的项目中 我想使用 RequireJS 并引导我的应用程序 如下所示 requirejs config baseUrl scripts vendor paths jquery https ajax googleapis com ajax
  • CustomAttribute反映html属性MVC5

    希望找到一种方法 当在 MVC5 中使用 Custom 属性或最好使用 RegularExpressionAttribute 装饰模型中的属性时 html 控件将包含它作为控件的另一个属性 例如 class CoolModel Custom
  • Hibernate 查询语言中四舍五入到小数点后两位

    你好 有人可以帮我如何在 hql 中四舍五入到小数点后两位吗 我在网上找不到任何东西 以下是我的查询 Select p amount as amt p desc from pay p register r where r type 1 an
  • 将字符串中匹配的正则表达式值替换为字典中的正确值

    我有一根绳子 var text the animal jumped over the description fox 和一本字典 var dictionary animal dog description jumped 我正在编写一个函数
  • CSS:100% 字体大小 - 100% 是什么?

    有many http www alistapart com articles howtosizetextincss articles http www w3 org TR CSS2 fonts html font size props an
  • java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener 错误

    您好 我的 struts1 spring 和 hibernate 集成中的动态 Web 应用程序是在 64 位计算机上开发的 它在 64 位计算机上运行良好 但在 32 位计算机上出现 jar 问题 并给出以下错误 SEVERE Error
  • 从 Google Chrome 自动生成 HAR 文件

    基本上我需要的是一种自动化的方法result以下操作 打开一个新选项卡 打开开发者工具中的网络选项卡 加载一个 URL 选择 全部另存为 HAR 通常 建议的解决方案涉及使用PhantomJS http phantomjs org brow
  • WAMP 的 MySQL 数据库文件驻留在哪里?

    我只是好奇 因为我开始学习 PHP 和 MySQL MySQL 的数据库和其他文件驻留在硬盘上的位置 我在 Windows XP SP2 平台上安装了 WAMP 从以下命令的输出中探索变量 mysql gt show variables l
  • Xamarin.Forms 中主从页面的母版页有多宽?

    根据屏幕尺寸 和设备习惯 母版页的宽度会有所不同 在手机上 它约为屏幕宽度的 80 而在平板电脑上 它似乎是一个恒定尺寸 如 320 dp 有人知道这个值的一般公式吗 我想用它在施工期间布置一些元素 当Width属性尚未设置 Edit I
  • 在 django 中使用 Context 时如何禁用 HTML 编码

    在我的 django 应用程序中 我使用模板来构建电子邮件正文 其中一个参数是 url 请注意 url 中有两个参数以 分隔 t loader get template sometemplate c Context foo bar url
  • ES6 Promise / Typescript 和 Bluebird Promise

    我有一个 nodejs typescript 2 项目并使用es6 promise https github com stefanpenner es6 promise包裹 现在我想摆脱额外的包 因为我可以直接在打字稿中定位 ES6 所以我删