【问题标题】:Typescript - Import vs "declare var" with type definitionsTypescript - 导入与带有类型定义的“declare var”
【发布时间】:2016-01-25 05:11:49
【问题描述】:

使用 Typescript 构建一个 Angular 2 应用程序,我正在尝试导入流行的 d3 库。

我已经使用TSD 安装了类型定义,并且我正确地引用了tsd.d.ts 文件:

/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />

现在,我想import 我的d3 node_module。它是通过NPM安装的:

/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />
import * as d3 from 'd3/d3';

这可行,但我没有从我的类型定义中获得任何好处。我的 IDE 没有提供任何预先输入的信息或语法高亮显示。如果我把它改成这样:

/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />
import * as d3 from 'd3/d3';

我现在得到了我期望的所有语法高亮/提前输入定义。但是,我的应用正在寻找不存在的 node_modules/d3.js 文件,所以这显然不起作用。

当我将 import 语句更改为 var 声明时,我的应用程序可以正确编译,并且我得到了所有适当的打字稿定义:

/// <reference path="../../../tools/typings/tsd/tsd.d.ts" />
declare var d3 = require('d3/d3');

那么,我的问题就是正确的方法是什么? importdeclare var 有什么区别,如果 npm 模块本身不包含 import 时,有没有办法获取类型定义?

我注意到像 import {Component} from 'angular2/core'; 这样的东西可以正常工作,但是类型定义包含在与我要导入的 javascript 文件相同的目录中。

【问题讨论】:

  • 你使用的是什么版本的打字稿。
  • @JMac 我正在尝试让 d3 也可以使用 TypeScript。你最终得到这个工作了吗?你的项目是开源的吗?

标签: typescript


【解决方案1】:

import * as d3 from 'd3/d3'; 应该可以在类型系统(没有 ///&lt;reference .../&gt;)下正常工作,只要编译器选项正确,并且类型文件夹中的文件夹结构正确。

declare var d3 是如何声明一个存在于 JS 中某处的变量。把它想象成“是的,打字稿,停止抱怨,相信我它存在”。

import {Component} from 'angular/core'; 是如何从模块中提取特定部分。在节点方面,这转换为var Component = require('angular/core').Component;

要启用的重要编译器选项是 "moduleResolution": "node",它应该已经启用才能使 angular 起作用。

所以如果 d3 被安装为 node_module 那么你应该可以简单地使用:

npm install d3
npm install --save-dev @types/d3
tsc

然后

import * as d3 from 'd3';

【讨论】:

  • 对于其他首先使用 typescript 的人(比如我),'tsd' 已被弃用,而支持 'typings'
  • 如果我错了,请纠正我。这一步 { npm install d3, tsd install d3, tsc } 等于----> npm install @types/d3 那么,导入步骤对吗??
  • @Rishi d3 可能是 @types/d3 的依赖项,这会导致您的方案正常工作。然而,首选的方法可能是npm install d3 然后npm install --save-dev @types/d3,这样您就可以将依赖项放在package.json 中的正确位置。 @types/d3 在运行时不需要,仅在编译时需要,因此您站点的包/产品版本的用户不需要额外的文件,因此可以安全地忽略它们。
猜你喜欢
  • 2015-07-03
  • 2020-10-11
  • 1970-01-01
  • 2017-02-10
  • 2019-04-30
  • 1970-01-01
  • 2016-07-17
  • 2018-05-29
  • 2016-10-24
相关资源
最近更新 更多