打字稿和 d3

2023-12-27

我有一个使用 d3 库的应用程序。在打字稿代码中,为了成功使用 d3 (即,没有编译器错误 TS2686,d3 引用 UMD 全局,但当前文件是模块),我必须包含以下行:import * as d3 from 'd3';问题是它会发出:require('d3');在 JavaScript 中。这不是我们应用程序中 d3 库所在的位置。它位于 Web 应用程序的根目录下名为“d3”的目录中。另外,我在 JavaScript 中根本不需要它,因为我们的 index.html 将其作为全局加载。 很难弄清楚如何获取 TypeScript 源以允许我在不导入的情况下引用 d3。


您有两种可能的选择:

抑制警告

As of TypeScript 3.5a--allowUmdGlobalAccess标志已添加 https://www.typescriptlang.org/docs/handbook/release-notes/overview.html#the---allowumdglobalaccess-flag允许您从模块文件访问全局定义。在你的情况下,这意味着你可以使用d3作为全局命名空间,无需import or require陈述。这显然适用于项目中的所有模块文件以及任何其他 UMD 类型定义(例如 React),因此请注意,它可能并不在所有上下文中都是正确的,具体取决于您的代码设置和使用的库。

声明一个全局命名空间

TS 3.5 之前且没有--allowUmdGlobalAccess flag UMD typedef 不能作为全局命名空间引用 https://github.com/Microsoft/TypeScript/issues/10178来自模块文件内。 (它只允许您从非模块文件引用全局命名空间。)这是一种有意的安全措施,防止意外引用在严格基于模块的项目中不可用的全局命名空间。这解决方法 https://github.com/Microsoft/TypeScript/issues/10178#issuecomment-263787616是在项目中手动声明一个全局命名空间:

// global.d.ts
import * as _d3 from "d3";

declare global {
  const d3: typeof _d3;
}

现在你可以参考d3来自模块而不导入自"d3",并且您仍然应该对d3对象基于@types/d3.

这比--allowUmdGlobalAccess因为它对您的特定代码设置非常明确。换句话说,它不会无意中让您编译代码设置未全局提供的其他 UMD 模块。

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

打字稿和 d3 的相关文章

随机推荐

  • 如何通过 adb android 更改首选网络类型?

    如何使用 ADB 更改首选网络类型 示例 设置仅使用 GSM 仅使用 WCDMA 仅使用 LTE 或自动 这适用于我的设备 adb shell sqlite3 data data com android providers settings
  • 获取 ObservableValue 的所有已注册侦听器

    如何让所有听众获得可观察的值 我可以扩展课程并覆盖addListener and removeListener将它们存储在集合中的方法 但该集合应该已经以某种方式存储在可观察值内 我怎样才能得到那一套 I find a way around
  • Powershell获取完整路径信息

    我有一个名为视频的目录 在这个目录里面 是一堆各种相机的子目录 我有一个脚本可以检查各个摄像机 并删除早于特定日期的录制内容 我在获取相机的完整目录信息时遇到了一些麻烦 我正在使用以下方法来获取它 Get all of the paths
  • IOS 覆盖本地通知

    我创建了一个Local Notification当某个按钮 SetButton 被点击 我现在的问题是如果SetButton再次按下 它不会覆盖第一次按下 它会显示 2 个通知 依此类推 如何确保第二次按按钮会覆盖第一次按按钮并且不会累积通
  • 后台工作者是一个线程吗? (C#)

    后台工作者是一个线程吗 我应该什么时候使用它 是的 它基本上就像一个线程 但具有额外的功能 通知您进度和完成时间的事件 每当您需要执行可能需要一段时间的操作 例如计算 文件或数据库读 写 Web 请求等 并且您不希望 GUI 在执行时显得无
  • 如何挂钩 MANAGED(.NET) 进程并收集该进程内的信息?

    我需要挂钩托管 C C CLI 进程 我需要查找有关它有多少个窗口 其关联控件及其属性 的信息并将其发送到用 C 托管代码编写的目标应用程序 为此我需要做什么 我是否需要探索该托管进程的 IAT 导入地址表 和 EAT 导出地址表 我需要用
  • Rails 从现有表生成模型?

    我对 Rails 框架非常陌生 想知道如何基于现有表生成模型 例如 我有一个名为 person 的表 并且想要根据该表中的列生成模型 但是 每当我使用 ruby script generate model Person skip migra
  • video-react 属性宽度和高度不起作用

    按照这个doc https video react js org components player 我们可以在属性中添加玩家的宽度和高度
  • 在 text/xml 值中编码 CR-LF 换行符的正确方法是什么?

    与可以执行任何操作的 application xml 文件或将所有空白序列转换为单个空格字符的标准化字符串值相反 我在这里专门询问具有字符串值的文本 xml 文件的上下文 为了简单起见 假设我仅在 UTF8 编码文件中使用 ASCII 字符
  • 是否可以将Python Seaborn与plotly集成

    我正在为plot ly寻找python seaborn的一些指导 是否可以在plot ly 上提供seaborn 图表 有可用的示例或教程吗 请帮忙 提前致谢 Seaborn 基于 matplotlib Plotly 可以转换 matplo
  • 带有 json 文件的 C++ Boost 程序选项

    可以使用 boost 程序选项库 http www boost org doc libs 1 64 0 doc html program options html http www boost org doc libs 1 64 0 doc
  • 启用链接时优化会导致链接器错误吗?

    我有可以正常编译和链接的代码 我现在尝试启用链接时优化 但添加 flto我的编译器和链接器标志导致链接器错误 usr local lib libboost thread a thread o In function void boost t
  • 同一活动中不同可组合功能的不同视图模型

    我在堆栈溢出的某个地方读到过 如果您正在创建新应用程序 则可以完全跳过使用 Fragment 只需使用可组合函数来表示您的屏幕即可 但是 在使用片段时 我们可以针对不同的片段 屏幕使用不同的视图模型 我们可以通过可组合函数实现相同的目标吗
  • component.clientId 和 p:component() 生成的客户端 id 之间的区别

    我正在尝试检索 p dataList 内的 h panelGroup 的客户端 ID 我尝试了两种方法 1 使用component clientId 例如
  • 为 Laravel Blade 模板解析字符串而不是文件

    我需要缓存 CMS 生成的远程刀片模板 以使应用程序的公共接口保持最新 理想情况下 我可以使用 file get contents 和缓存每周检查一次更新 有没有办法让 Laravel 使用变量的内容而不是文件作为刀片模板 我找不到让 La
  • Pylance 不允许我导航到源代码,而是将我带到 .pyi 存根

    我正在使用 pylance 作为 vs code 它工作得非常好 除了因为我使用它 当我尝试从已安装的库检查代码时 我只能得到存根 我认为是由 pylance 生成的 For example the information shown ab
  • 有没有办法获取unix套接字连接另一端的uid

    有没有办法让 UNIX 域套接字侦听器仅接受来自特定用户的连接 chmod chown不适用于抽象套接字 afaik 或者换句话说 获取传入连接的 uid 在 Linux 上 Dbus 在Linux上使用抽象unix socket 有一个功
  • 如何在数组中搜索子字符串匹配项?

    我需要在 JavaScript 中搜索数组 搜索将仅匹配字符串的一部分 因为字符串将包含其他组件 然后我需要返回成功匹配的数组元素和完整字符串 Example const windowArray item thing id 3 text c
  • Android Seekbar - 只允许用拇指进行更改?

    我有一个搜索栏 我只想允许用拇指 手柄部分进行更改 如果用户点击其他任何地方 我希望忽略该点击 是否有固有的属性可以做到这一点 如果没有 我已经知道我可以设置一个 onTouch 监听器并返回true 禁用 它 但是有没有办法检测拇指何时被
  • 打字稿和 d3

    我有一个使用 d3 库的应用程序 在打字稿代码中 为了成功使用 d3 即 没有编译器错误 TS2686 d3 引用 UMD 全局 但当前文件是模块 我必须包含以下行 import as d3 from d3 问题是它会发出 require