TypeScript中`import from`与`import require`的区别

14

我使用node.js,最近决定尝试TypeScript,但是我有些困惑模块如何导入。我看到两种不同的语法,但我无法确定它们之间的区别:

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

这两者是否相同?如果不相同,应该在哪种情况下使用每个?

1个回答

14

import * as a from 'a';是新的“ES6风格”导入语法(自TypeScript 1.5以来可用)。

尽可能使用这种语法。

然而,有一个注意点。ES6导入语法只能导入作为模块定义的模块或者导出为模块一部分的对象(类、接口、变量等)。

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

declare module "my-class" {

    class MyClass { ... }

    export = MyClass
} 

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

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

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

有关详细信息和可能的解决方法,请参阅此问题,在先前的情况下,可以向定义文件添加一个空模块声明。

declare module "my-class" {

    class MyClass { ... }

    module MyClass {} // <=

    export = MyClass
} 

1
require似乎适用于所有情况时,为什么我还要使用import from语法呢? - Rsh
1
@Rsh 因为你希望尽可能兼容 ES6,这样 TypeScript 就可以保持作为 JavaScript 的超集,而不是一门独立的语言。 - Bruno Grieder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接