node.js - 没有 'new' 就无法调用类构造函数 - 带有 commonjs 的 typescript

标签 node.js typescript commonjs

我正在与 colyseus( Node 游戏服务器框架)进行服务器端聊天。我在 module:commonjs 中使用 typescript ,因为 colyseus 是建立在 commonjs 之上的。

我有类 ChatRoom 扩展 Colyseus.Room。 在运行时我得到这个错误:

Class constructor Room cannot be invoked without 'new'.

还有 javascript 中的麻烦:

function ChatRoom() {
   return _super !== null && _super.apply(this, arguments) || this;
}

来自 typescript 类:

import {Room} from "colyseus";

export class ChatRoom extends Room {

    onInit(options) {
        console.log("BasicRoom created!", options);
    }

    onJoin(client) {
        this.broadcast(`${ client.sessionId } joined.`);
    }

    onLeave(client) {
        this.broadcast(`${ client.sessionId } left.`);
    }

    onMessage(client, data) {
        console.log("BasicRoom received message from", client.sessionId, ":", data);
        this.broadcast(`(${ client.sessionId }) ${ data.message }`);
    }

    onDispose() {
        console.log("Dispose BasicRoom");
    }
  }

当编译后删除问题行时,该错误很容易被跳过。但是没有创建基类,这不是一个完整的解决方案。

我用谷歌搜索了这个问题,它似乎与 babel 转译器有关,尽管我不使用 babel。我只使用 tsc/tsconfig.json。

最佳答案

TypeScript 将一个类转换为对应的 ES5 类,但这种方式有必要将整个类层次结构转换为 ES5。

如果父类未转译(原生类或导入的 ES6 类,包括使用 Babel 转译的类),这将不起作用,因为 TypeScript 依赖于 var instance = Parent.call(this, . ..) ||这个 技巧调用父构造函数,而 ES6 类应该只用 new 调用。

这个问题应该在 Node.js 中通过设置 TypeScript target option 来解决。 es6 或更高版本。现代 Node.js 版本支持 ES6 类,无需转译它们。

同样的问题applies to Babel .

关于node.js - 没有 'new' 就无法调用类构造函数 - 带有 commonjs 的 typescript ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50203369/

相关文章:

javascript - VS 2015-typescript 不生成 javascript 文件

typescript - ts2339 : property 'should' does not exist on type Bluebird<boolean>

javascript - 有没有办法允许 browserify 模块访问全局范围(窗口对象)?

javascript - 等待递归 readdir 函数结束

node.js - Javascript AWS SDK S3上传方法与正文流生成空文件

node.js - 如何将新的 SSL 证书和 key 注入(inject)正在运行的 Node http.Server?

typescript 2 : custom typings for untyped npm module

typescript - 使用额外的 `id` 属性将 Rust 结构展平回 TypeScript 单个对象,以返回 wasm-bindgen 函数

javascript - Bing map V8 Web 控件和 CommonJS

node.js - 对 .yarnrc 和 .npmrc 感到困惑