首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Typescript和d3

Typescript和d3
EN

Stack Overflow用户
提问于 2018-01-18 00:38:32
回答 1查看 14.7K关注 0票数 11

我有一个使用d3库的应用程序。在typescript代码中,为了成功地使用d3 (即没有编译器错误的情况下,d3引用了一个UMD全局变量,但当前文件是一个模块),我必须包括一行:import * as d3 from 'd3'; Problem with that is TS2686:require('d3'); In JavaScript。这不是我们应用程序中的d3库所在的位置。它位于web应用的根目录下,名为'd3‘的目录中。此外,我根本不需要在JavaScript中使用它,因为我们的index.html将它作为全局变量加载。我很难弄清楚如何获得TypeScript源代码,以便在不导入的情况下引用d3。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-18 01:37:06

您有两种可能的选择:

禁止显示警告

TypeScript 3.5 a --allowUmdGlobalAccess flag was added开始,允许您从模块文件访问全局定义。在您的例子中,这意味着您可以在没有importrequire语句的情况下使用require作为全局名称空间。这显然将适用于项目中的所有模块文件和任何其他UMD类型定义(例如,像React ),因此请注意,它可能在所有上下文中都不正确,这取决于您的代码设置和所使用的库。

声明全局命名空间

在TS3.5之前的版本中,在模块文件中没有--allowUmdGlobalAccess标志UMD typedefs can't be referenced as a global namespace。(它只允许您引用非模块文件中的全局名称空间。)这是一种有意的安全措施,可防止意外引用严格基于模块的项目中不可用的全局命名空间。workaround将在项目中手动声明一个全局名称空间:

代码语言:javascript
运行
复制
// global.d.ts
import * as _d3 from "d3";

declare global {
  const d3: typeof _d3;
}

现在,您可以从模块引用d3,而无需从"d3"导入,并且仍然可以基于@types/d3d3对象进行所有正确的类型检查。

--allowUmdGlobalAccess相比,它的优势在于它非常明确地描述了您的特定代码设置。换句话说,它不会无意中让您编译代码设置没有全局提供的其他UMD模块。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48305957

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档