繁体   English   中英

我们可以用 ES6 以外的其他格式编写 TypeScript 模块吗?

[英]Can we write TypeScript modules in another format besides ES6?

例如,我们可以使用 AMD 编写吗?

define([
  'hb!./some/file.hb'
], function(template) {
  //
})

在某种程度上,是的。

因为 TypeScript 只是 JavaScript 的超集,所以任何有效的 JavaScript 也是有效的 TypeScript。

在您的示例中,编译器会抱怨define

错误 TS2304:找不到名称“定义”。

在使用之前,您需要告诉编译器define存在:

declare var define;

define([
  'hb!./some/file.hb'
], function(template) {
  //
})

这将让编译器知道define存在,但它不会向编译器提供有关它的任何附加信息。 因此,另一种解决方案是添加正确的类型定义

要使用amd模块,您仍然需要包含amd模块加载器。 这不是 TypeScript 内置的东西。 TypeScript 只是 JavaScript 的超级集。

使用 TypeScript 可以启用编译器类型检查,并允许您使用较新的 JavaScript 功能,同时编译为较旧版本的 JavaScript。 但是,TypeScript 将无法理解另一个模块导出的内容,因此您需要为每个 AMD 模块声明一个描述模块导出内容的声明。

为此,正如另一个答案指出的那样,您还可以使用 ES6 语法编写模块,并将它们编译为amd格式。 来自TypeScriptLang.org的文档:

根据编译期间指定的模块目标,编译器将为 Node.js (CommonJS)、require.js (AMD)、同构 (UMD)、SystemJS 或 ECMAScript 2015 原生模块 (ES6) 模块加载系统生成适当的代码。 有关生成代码中的定义、要求和注册调用功能的更多信息,请参阅每个模块加载器的文档。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM