Nie można wywołać konstruktora klasy bez „nowego” - maszynopisu używającego commonjs
Prowadzę czat na serwerze z colyseusem (framework serwera gry node). Używam maszynopisu z modułem: commonjs, ponieważ colyseus jest zbudowany na commonjs.
Mam klasę
ChatRoom, która rozszerza
Colyseus.Room.
W czasie wykonywania otrzymuję ten błąd:
Class constructor Room cannot be invoked without 'new'.
A problem tkwi w javascript:
function ChatRoom() {
return _super !== null && _super.apply(this, arguments) || this;
}
z klasy maszynopisu:
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");
}
}
Błąd można łatwo przeoczyć, gdy problematyczna linia zostanie usunięta po kompilacji. Nie utworzono jednak żadnej klasy bazowej i nie jest to kompletne rozwiązanie.
Wyszukałem w Google ten problem i wydaje się, że jest on związany z transpilerem Babel, chociaż nie używam Babel. Używam tylko tsc/tsconfig.json.
Nie znaleziono powiązanych wyników
Zaproszony:
Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się
3 odpowiedzi
Anonimowy użytkownik
Potwierdzenie od:
W przypadku, gdy klasa nadrzędna nie zostanie przetransportowana (klasa natywna lub zaimportowana klasa ES6, w tym te transponowane za pomocą Babel), nie zadziała, ponieważ TypeScript opiera się na , aby wywołać konstruktor nadrzędny, podczas gdy klasy ES6 powinny być wywoływane tylko z .
Ten problem powinien zostać rozwiązany w Node.js przez ustawienie
parametr
https://www.typescriptlang.org ... .html
Używane maszynopis do ES6 . Nowoczesne wersje klas ES6 Node.js. Nie ma potrzeby transplan.
ustawienie wstępne jest ustawione na węzeł docelowy.
Ten sam problem
dotyczy również Babilonu
https://coderoad.ru/51860043/
.
Anonimowy użytkownik
Potwierdzenie od:
Znalazłem rozwiązanie oparte na
Nie można wywołać konstruktora klasy ES6/Babel bez 'new'
https://coderoad.ru/44625868/
Musiałem wyraźnie dołączyć Koloseum do mojego babilońskiego programu ładującego. Poniżej znajduje się fragment kodu w moim pliku konfiguracyjnym pakietu internetowego:
Anonimowy użytkownik
Potwierdzenie od:
ts-node
https://github.com/TypeStrong/ts-node
jest całkiem możliwe, że twój nie może zostać załadowany przez ts-node.
Najpierw upewnij się, że ustawiłeś poniższą opcję dla :
Następnie możesz spróbować lub użyć , aby określić ścieżkę do swojego .