【问题标题】:How to call JavaScript libraries from TypeScript project?如何从 TypeScript 项目中调用 JavaScript 库?
【发布时间】:2017-06-23 05:33:50
【问题描述】:

我正在开发一个现有的 TypeScript AngularJS 项目。现在我想使用 d3js,但要这样做,我需要手动下载 d3js typescript(原来 d3 由一百万个文件组成),然后是 d3js min javascript。公司代理不允许我使用工具下载/管理依赖项等,所以我只有手动选项。

因此我更喜欢直接在index.html 中导入 d3js,并直接从 TypeScript 调用 d3js,而不使用 d3 ts 版本。

所以我做例如

var svg = d3.select("svg"),
    margin = {top: 20, right: 20, bottom: 30, left: 40},
    width = +svg.attr("width") - margin.left - margin.right,
    height = +svg.attr("height") - margin.top - margin.bottom,
    g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")");

var x = d3.scaleBand()
    .rangeRound([0, width])
    .paddingInner(0.05)
    .align(0.1);

但是我得到编译器错误“找不到名称d3”有没有办法在 TypeScript 中告诉这个 JavaScript 对象是在其他地方定义的,它不应该假设它?

可惜d3 js 被拆成百万块了……我发现用处不大,没有select,谁还会用d3 scale?这对我来说毫无意义。

【问题讨论】:

标签: javascript angular d3.js typescript webstorm


【解决方案1】:

定义文件仅用于将ts源码编译成js,运行js不需要。

@types一起使用将是最简单的:

npm install --save @types/d3

如果您不能这样做,请手动下载定义文件并将其放在您的源附近,然后引用它:

/// <reference path="PATH_TO_D3_D_TS" />

如果你也不能这样做,那么声明它:

declare const d3: any;

这将告诉编译器变量d3 存在,并且它的类型是any,所以你不应该在使用它时遇到异常。

【讨论】:

  • 谢谢,第三个选择确实解决了我的问题。第一个不能因为代理,第二个是一场噩梦,因为有一百万个“确定键入”的 ts d3 文件,而不仅仅是一个检查出来,所以不幸的是,第三个选择是唯一一个看起来合理的选择。
  • 您可以随时在另一个环境(比如您的家)中执行npm install @types/d3,然后复制node_modules/@types/d3 文件夹。我列出的第三个选项的问题是编译器在使用d3 时无法帮助您。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
  • 2018-09-06
  • 1970-01-01
相关资源
最近更新 更多