如何从 TypeScript 项目中调用 JavaScript 个库?

How to call JavaScript libraries from TypeScript project?

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

因此,我更喜欢简单地在 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);

但是我得到了编译器错误 "Cannot find name d3" 有没有办法在 TypeScript 中告诉这个 JavaScript 对象是在别处定义的,它不应该对它做任何假设?

可惜d3 js被拆成了一百万块...我发现它不是很有用,没有select谁会用d3 scale?这对我来说毫无意义。

定义文件仅在ts源码编译为js时需要,运行js不需要

@types一起使用最简单:

npm install --save @types/d3

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

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

如果您也做不到,请声明:

declare const d3: any;

这将告诉编译器变量 d3 存在,并且它的类型是 any,因此您不应该因使用它而出现异常。