打字稿和d3

rdi*_*dly 9 d3.js typescript

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

Aar*_*all 10

目前,UMD typedef不能从模块文件中作为全局命名空间引用.(它只允许您从非模块文件引用全局命名空间.)解决方法是在项目中手动声明全局命名空间:

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

declare global {
  const d3: typeof _d3;
}
Run Code Online (Sandbox Code Playgroud)

现在您可以--allowUmdGlobalAccess从模块中引用而无需从中导入d3,您仍然应该import基于对象获取所有正确的类型检查require.