Javascript 我们可以用ES6以外的其他格式编写TypeScript模块吗?
例如,我们能用AMD写吗Javascript 我们可以用ES6以外的其他格式编写TypeScript模块吗?,javascript,typescript,Javascript,Typescript,例如,我们能用AMD写吗 define([ 'hb!./some/file.hb' ], function(template) { // }) 在某种程度上,是的 因为TypeScript只是JavaScript的超集,所以任何有效的JavaScript都是有效的TypeScript 在您的示例中,编译器会抱怨define: 错误TS2304:找不到名称“define” 在使用编译器之前,您需要告诉编译器存在define: declare var define; define([
define([
'hb!./some/file.hb'
], function(template) {
//
})
在某种程度上,是的
因为TypeScript只是JavaScript的超集,所以任何有效的JavaScript都是有效的TypeScript
在您的示例中,编译器会抱怨define
:
错误TS2304:找不到名称“define”
在使用编译器之前,您需要告诉编译器存在define
:
declare var define;
define([
'hb!./some/file.hb'
], function(template) {
//
})
这将让编译器知道define
存在,但它不会向编译器提供关于它的任何附加信息。因此,另一个解决方案是添加适当的
要使用amd
模块,您仍然需要包含amd
模块加载器。这不是内置在TypeScript中的东西。TypeScript只是JavaScript的一个超级集合
使用TypeScript可以启用编译器类型检查,并允许您在编译到旧版本的JavaScript时使用较新的JavaScript功能。但是,TypeScript无法理解另一个模块导出的是什么,因此您需要为每个AMD模块声明,描述模块导出的内容
为此,正如另一个答案所指出的,您还可以使用ES6语法编写模块,并将它们编译为amd
格式。从以下地址的文档:
根据编译期间指定的模块目标,编译器将为Node.js(CommonJS)、require.js(AMD)、isomorphic(UMD)、SystemJS或ECMAScript 2015本机模块(ES6)模块加载系统生成适当的代码。有关所生成代码中的define、require和register调用的更多信息,请参阅每个模块加载器的文档
但是,在这种情况下,一个TypeScript无法从另一个AMD文件的导出中推断类型,就像它在ES6模块中所做的那样。我想这意味着我必须在每个AMD模块文件旁边写一个声明,我不希望这样做。