클래스 생성자는 'new' 없이 호출할 수 없습니다. commonjs가 있는 typescript
colysseus(노드 게임 서버 프레임워크)와 서버 사이드 채팅을 하고 있습니다.콜리세우스가 commonjs를 기반으로 하기 때문에 module:commonjs와 함께 typescript를 사용하고 있습니다.
저는 수업이 있어요.ChatRoom
그것은 확장되는Colyseus.Room
런타임에 다음 오류가 발생합니다.
Class constructor Room cannot be invoked without 'new'.
자바스크립트의 문제는 다음과 같습니다.
function ChatRoom() {
return _super !== null && _super.apply(this, arguments) || this;
}
유형 스크립트 클래스에서:
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");
}
}
컴파일 후 문제가 있는 행을 제거하면 오류가 쉽게 건너뜁니다.그러나 기본 클래스는 생성되지 않으며 이는 완전한 솔루션이 아닙니다.
제가 이슈를 검색해보니 바벨을 사용하지 않지만 바벨 트랜스파일러와 관련이 있는 것 같습니다.저는 tsc / tscconfig.json만 사용합니다.
TypeScript는 클래스를 ES5로 transcript지만 이 방법으로 전체 클래스 계층을 ES5로 transcript해야 합니다.
부모 클래스가 변환되지 않은 경우(Babel로 변환된 클래스를 포함하여 네이티브 클래스 또는 가져온 ES6 클래스), TypeScript가 다음에 의존하기 때문에 이는 작동하지 않습니다.var instance = Parent.call(this, ...) || this
상위 생성자를 호출하기 위한 트릭, 반면 ES6 클래스는 다음을 통해서만 호출되어야 합니다.new
.
이 문제는 Node.js에서 TypeScript 옵션을 다음으로 설정하여 해결해야 합니다.es6
그 이상.최신 Node.js 버전은 ES6 클래스를 지원하므로 변환할 필요가 없습니다.
같은 문제가 바벨에게도 적용됩니다.
ts-node를 사용하는 사용자의 경우 다음과 같은 작업이 가능할 수 있습니다.tsconfig.json
ts-node에서 로드할 수 없습니다.
- 다음 옵션을 설정했는지 확인합니다.
tsconfig.json
:
{
"compilerOptions": {
"target": "ES6",
...
}
}
- 해라
ts-node --script-mode
또는 사용--project
경로를 지정합니다.tsconfig.json
.
자바스크립트, 웹팩, 바벨(TypeScript 없음)을 사용하여 동일한 문제를 발견했습니다.
ES6/Babel Class Constructor 기반 솔루션이 'new' 없이는 호출될 수 없음을 발견했습니다.
저는 베이비 로더에 콜리세우스를 명시적으로 포함시켜야 했습니다.다음은 내 웹 팩 구성 파일의 스니펫입니다.
module: {
rules: [
{
test: /\.js$/,
exclude: /node_modules/,
include: /colyseus/,
use: {
loader: "babel-loader"
}
}
]
},
언급URL : https://stackoverflow.com/questions/50203369/class-constructor-cannot-be-invoked-without-new-typescript-with-commonjs
'programing' 카테고리의 다른 글
Git 인덱스에는 정확히 무엇이 포함되어 있습니까? (0) | 2023.07.05 |
---|---|
클리닝 코드 - @Autowire를 적용해야 하는 위치는 어디입니까? (0) | 2023.07.05 |
MongoDB - 값이 null이거나 X보다 작은 결과를 찾습니다. (0) | 2023.07.05 |
데이터 소스를 사용할 수 있을 때까지 스프링 재시도 연결 (0) | 2023.07.05 |
기본(슈퍼) 클래스를 초기화하려면 어떻게 해야 합니까? (0) | 2023.06.30 |