TypeScript 中 `import from` 和 `import require` 的区别
Posted
技术标签:
【中文标题】TypeScript 中 `import from` 和 `import require` 的区别【英文标题】:Difference between `import from` and `import require` in TypeScript 【发布时间】:2016-10-05 17:03:52 【问题描述】:我使用 node.js,最近决定试一试 TypeScript,但我对如何导入模块有点困惑。我看到两种不同的语法,但我不知道它们到底有什么区别:
import * as a from 'a'; // ES6 standard to import stuff
// OR ...
import a = require('a');
这些是一样的吗?如果不是,我应该在哪里使用它们?
【问题讨论】:
【参考方案1】: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
【讨论】:
当 require 适用于所有情况(看起来)为什么我应该使用import from
语法呢?
@Rsh 因为你希望尽可能多地兼容 ES6,因此 Typescript 仍然是 Javascript 的超集,而不是它的语言。以上是关于TypeScript 中 `import from` 和 `import require` 的区别的主要内容,如果未能解决你的问题,请参考以下文章
你如何在Typescript中优雅地导入AWS-Lambda?