node.js - 将 typescript 定义模块声明匹配到 Node 模块导入

标签 node.js typescript tsd

我已经通过 NPM 安装了流行的 d3 库。

npm install d3
tsd install d3 -save
tsc

在我的 home.ts 文件中,我导入了模块:

从“d3/d3”导入 * 作为 d3;

编译正确,但出现语义错误:

app/home/components/home.ts(2,21):错误 TS2307:找不到模块“d3/d3”。

此外,我在 IDE 中丢失了所有语法高亮/预输入信息。

TSD 提供的原始 d3.d.ts 文件声明模块如下:

declare module 'd3' {
    export = d3;
}

如果我将模块更改为 'd3/d3',一切正常:

declare module 'd3/d3' {
    export = d3;
}

所以,我很难得到我需要的两个东西:

import * as d3 from 'd3'; 给出了我期望的类型定义,但在 node_modules/d3.js 中查找了一个不正确的模块。

import * as d3 from 'd3/d3'; 找到了正确的模块,因为路径是正确的,但我丢失了我的类型定义,因为模块声明不匹配。

我怎样才能让这两个东西匹配起来,这样我就可以简单地导入模块而不会丢失我的类型定义?

仅供引用:我使用的是 typescript 1.7.5,我的 moduleResolution 设置为 node

最佳答案

你需要告诉加载程序去哪里找东西。在您的 systemjs.config.js 中,在 map 对象中添加以下映射:

var map= {
...
...
'd3':  'node_modules/d3'
};

d3.js 文件确实位于 node_modules/d3 中,上面的映射会让加载器找到该文件。现在,您可以将其导入您的组件中:

import * as d3 from 'd3';

关于node.js - 将 typescript 定义模块声明匹配到 Node 模块导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34986173/

相关文章:

javascript - 如何使用 Quickblox 从 javascript 发送推送通知

node.js - 如何使用node/Express存储用户数据

javascript - 如何使用 Visual Studio Code 调试 Angular 4 单元测试

javascript - Unity webgl html5 自定义 microsoft power bi Visual

javascript - 打字环境安装不起作用

TypeScript:如何将现有命名空间设为全局?

typescript - 无法使用 Angular 2 导入 toastr 模块

javascript - 使用 Ajax POST 请求将图像和 JSON 数据发送到服务器?

javascript - javascript/node.js 中是否有与 python 的 inspect.getargspec 等效的东西?

typescript - 类型错误 : Class constructor MixinStrategy cannot be invoked without 'new'