TypeScript中`import from`和`import require`之间的区别

时间:2016-06-06 07:12:56

标签: node.js typescript ecmascript-6

我使用node.js,我最近决定给TypeScript一个镜头,但我对如何导入模块感到困惑。我看到两种不同的语法,我无法确切地知道它们的区别是什么:

import * as a from 'a'; // ES6 standard to import stuff
// OR ...
import a = require('a');

这些是一回事吗?如果他们不是,我应该在哪里使用它们?

1 个答案:

答案 0 :(得分:12)

import * as a from 'a';是新的“ES6样式”导入语法(自Typescript 1.5起可用)。

现在应该使用此语法。

但有一点需要注意。 ES6导入语法只能导入作为模块一部分导出的模块(由ES6定义)或对象(类,接口,变量,...)。

一些Javascript库将直接导出函数或类,相应的定义文件通常如下所示:

declare module "my-class" {

    class MyClass { ... }

    export = MyClass
} 

在这种情况下,“旧”导入语法是唯一可以使用的语法

import MyClass = require("my-class");

未使用此语法将导致错误TS2497

检查this issue以获取详细信息以及可能的解决方法,在前一种情况下,将空模块声明添加到定义文件

declare module "my-class" {

    class MyClass { ... }

    module MyClass {} // <=

    export = MyClass
}