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

带有node.js的Typescript给出;“不是一个构造函数”;错误,node.js,visual-studio,typescript,Node.js,Visual Studio,Typescript,我有一个node.js应用程序,其中包含两个typescript文件。 matchmanager.ts的定义如下: namespace LobbyService { export class MatchManager { constructor() { /*code*/ } } } 和main.ts,定义为 namespace LobbyService { let matchManager: MatchManager = new MatchManage

我有一个node.js应用程序,其中包含两个typescript文件。 matchmanager.ts的定义如下:

namespace LobbyService
{
    export class MatchManager 
    {
    constructor() { /*code*/ }
    }
}
和main.ts,定义为

namespace LobbyService
{
    let matchManager: MatchManager = new MatchManager() ;
    /* code */
}
我将visual studio设置为将文件输出到一个名为lobbyservice.JS的JS文件中

然而,当我打字时

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

不知道为什么我在同一个源代码中得到两个不同的输出。这两个项目都具有相同的模块属性“none”

,因此用户Elliott强调,输出javascript文件的顺序确实会产生问题,这是一个已知的typescript编译难题

要解决这个问题,我必须补充一点

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

在使用MatchManager类的我的typescript文件上,即使它们位于同一命名空间上并且编译正常。这迫使typescript编译器创建一个可行的javascript输出

因此用户Elliott强调,输出javascript文件的顺序确实会产生问题,这是一个已知的typescript编译难题

要解决这个问题,我必须补充一点

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

在使用MatchManager类的我的typescript文件上,即使它们位于同一命名空间上并且编译正常。这迫使typescript编译器创建一个可行的javascript输出

您使用名称空间的原因是什么?您应该只使用require来导入其他模块;(函数(LobbyService){var matchManager=new LobbyService.matchManager();/…var LobbyService;(函数(LobbyService){var matchManager=(函数(){我使用名称空间来保存东西-周围有很多不同的代码库。奇怪的是,这以前是可以工作的,不需要导入帮助,我用生成的代码编辑了这篇文章。你为什么要使用名称空间?你应该只使用require来导入其他模块。compiled输出看起来像?编译输出看起来像这样-var-LobbyService;(函数(LobbyService){var-matchManager=new-LobbyService.matchManager();/…var-LobbyService;(函数(LobbyService){var-matchManager=(函数(){我正在使用名称空间来有序地保存东西-有很多不同的代码库。奇怪的是,这在以前是有效的,不需要导入帮助,我用生成的代码编辑了这篇文章