[英]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.