带有node.js的Typescript给出“不是构造函数”的错误

我有一个node.js应用程序与两个打字稿文件。 matchmanager.ts被定义为 –

namespace LobbyService { export class MatchManager { constructor() { /*code*/ } } } 

和main.ts被定义为

 namespace LobbyService { let matchManager: MatchManager = new MatchManager() ; /* code */ } 

我安装Visual Studio输出文件到一个名为lobbyservice.js的JS文件

但是,当我input

 node lobbyservice.js 

我得到以下错误 –

 TypeError: LobbyService.MatchManager is not a constructor 

生成的文件有这个输出 –

 var LobbyService; (function (LobbyService) { var matchManager = new LobbyService.MatchManager(); })(LobbyService || (LobbyService = {})); var LobbyService; (function (LobbyService) { var MatchManager = (function () { function MatchManager() { console.log("created"); } return MatchManager; }()); LobbyService.MatchManager = MatchManager; })(LobbyService || (LobbyService = {})); 

这是以前的工作,但由于一些奇怪的原因,现在不是。 有什么想法吗?

更新 – 我设法得到一个版本的lobbyservice.js工作。 出于某种奇怪的原因,Visual Studio将文件的一个版本转换为上面的版本,其中一个版本 –

 var LobbyService; (function (LobbyService) { var MatchManager = (function () { function MatchManager() { console.log("created"); } return MatchManager; }()); LobbyService.MatchManager = MatchManager; })(LobbyService || (LobbyService = {})); var LobbyService; (function (LobbyService) { var matchManager = new LobbyService.MatchManager(); })(LobbyService || (LobbyService = {})); //# sourceMappingURL=lobby.js.map 

没有线索为什么我得到两个不同的输出,如同样的源代码。 这两个项目都具有相同的模块属性“无”

所以用户Elliott强调,确实这是一个知道打字稿的编译怪癖,输出JavaScript文件的顺序造成了一个问题。

要解决这个问题,我不得不补充

 /// <reference path="matchmanager.ts"/> 

在使用MatchManager类的打字稿文件上,尽pipe它们在相同的命名空间上并且编译正常。 这迫使打字稿编译器创build一个可用的JavaScript输出。