带有node.js的Typescript给出;“不是一个构造函数”;错误
我有一个node.js应用程序,其中包含两个typescript文件。 matchmanager.ts的定义如下:带有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
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=(函数(){我正在使用名称空间来有序地保存东西-有很多不同的代码库。奇怪的是,这在以前是有效的,不需要导入帮助,我用生成的代码编辑了这篇文章