我有一个带有两个打字稿文件的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文件中但是,当我输入
时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”
答案 0 :(得分:0)
因此,用户Elliott强调,确实它是一个知道打字稿编译怪癖,其中输出javascript文件的顺序会产生问题。
要解决这个问题,我必须添加
/// <reference path="matchmanager.ts"/>
在我使用MatchManager类的打字稿文件上,即使它们位于相同的命名空间并编译好。这迫使typescript编译器创建一个可行的javascript输出。