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

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([

例如,我们能用AMD写吗

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模块文件旁边写一个声明,我不希望这样做。