我有一个使用d3库的应用。在打字稿代码中,为了成功使用d3(即,没有编译器错误TS2686,d3指的是UMD全局,但当前文件是模块),我必须包括以下行:
import * as d3 from 'd3';
问题在于它发出:
require('d3');
在JavaScript中。这不是d3库在我们的应用程序中的位置。它位于Web应用程序的根目录下,名为' d3'。另外,我根本不需要它,因为我们的index.html将它作为全局加载。
很难搞清楚如何获取TypeScript源以允许我在没有导入的情况下引用d3。
答案 0 :(得分:6)
Currently UMD typedefs can't be referenced as a global namespace。 (它只允许您从非模块文件引用全局命名空间。)workaround是在项目中手动声明全局命名空间:
// global.d.ts
import * as _d3 from "d3";
declare global {
const d3: typeof _d3;
}
现在,您可以在不从d3
导入的情况下从模块中引用"d3"
,并且仍然应该基于d3
对@types/d3
对象进行所有正确的类型检查。