gpt4 book ai didi

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

转载 作者:搜寻专家 更新时间:2023-10-30 21:14:50 24 4
gpt4 key购买 nike

我正在与 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/

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