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

标签 node.js visual-studio typescript

我有一个带有两个 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/

相关文章:

javascript - 使用nunjucks时 block 结束报错

node.js - 与模板引擎 react

node.js - 使用 CircleCI 部署到 Firebase 托管

javascript - 将 HTML 转换为 Javascript 字符串

vb.net - itextsharp 生成 PDF 到客户端浏览器 : (Vb.net)

reactjs - 在 react :Module not found: Can't resolve 'react-router-dom'

angular - 删除 Angular Material 文本框边框,不影响其他组件

javascript - 无法从 Node/express 到我的客户端应用程序获取成功响应数据/状态( react ): "referenceerror response is not defined"

c++ - 将带有 Boost 的 C++ 应用程序从 Linux 移动到带有 Visual Studio 6 的 Windows

javascript - TypeScript/JavaScript 缩小