gpt4 book ai didi

node.js - 使用 Node.js 的 Typescript 给出 "is not a constructor"错误

转载 作者:太空宇宙 更新时间:2023-11-04 02:02:48 24 4
gpt4 key购买 nike

我有一个带有两个 typescript 文件的node.js应用程序。matchmanager.ts 定义为 -

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

和 main.ts 定义为

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

我设置 Visual Studio 将文件输出到一个名为obbyservice.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 = {}));

这之前是有效的,但由于某些奇怪的原因现在不行了。有什么想法吗?

更新 - 我设法获得了一个可以运行的obbyservice.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 强调,这确实是一个众所周知的 typescript 编译怪癖,其中输出 javascript 文件的顺序会产生问题。

要解决这个问题,我必须添加

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

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

关于node.js - 使用 Node.js 的 Typescript 给出 "is not a constructor"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45393218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com