我对Javascript,NodeJS和--显然-TypeScript很陌生。我想尝试使用src/services
(Windows)中的编译器服务,为编辑器提供智能感知等。
据我所知,我需要能够在 NodeJS 服务器中require
TypeScript 服务代码,并从编辑器中与之通信。我找不到任何特定于 NodeJS 的 TypeScript 服务代码,所以我想我必须用 --module amd
编译服务代码才能通过 RequireJS 将其提供给 NodeJS。
如果上述是正确的,我尝试编译服务代码--module amd
产生与使用默认模块类型完全相同的结果(见下文)。
$ tsc.cmd --module amd --out amd.js .languageService.ts
$ tsc.cmd --out comm.js .languageService.ts
$ diff.exe .amd.js .comm.js
$
诚然,这令人困惑,但languageService.ts中的代码不在AMD/RequireJS定义的"模块"中。
该规范将module
块内的东西称为"内部模块"。这就是你在languageService.ts中看到的。您可以将它们视为公开顶级名称的容器或单例(查看简单内部模块的代码生成可以很好地阐明这一点)。您可以像使用常规顶级对象一样使用这些对象,而无需任何模块加载器。
生成用于require
的外部模块(由规范命名)是通过将 export
指令放在 .ts 文件中的顶级声明上来完成的(请参阅规范第 9.2.1 节)。如果您有兴趣,有一些示例(例如图像板)可供下载。
你必须将模块定义为 export module
,而不是你的module
,然后用 --m amd
或 --module amd
编译它。
我花了几个小时才意识到:)