2016-04-12 4 views
5

Używam babel do transpile.Błąd Babel: Konstruktor klasy Foo nie może zostać wywołany bez 'nowego'

Mam class BaseComponent, który jest przedłużany o class Logger.

Kiedy biegnę new Logger() w przeglądarce, otrzymuję ten błąd

konstruktor klasy BaseComponent nie można powoływać się bez „nowego”

kodu, który rzuca to:

var Logger = function (_BaseComponent) { 
    _inherits(Logger, _BaseComponent); 

    function Logger() { 
    _classCallCheck(this, Logger); 

    return _possibleConstructorReturn(this, Object.getPrototypeOf(Logger).call(this, "n")); //throws here 
    } 
+0

Czy to wyjście babel, kodu lub które zostały napisane? (Jeśli jest to wynik, pokaż napisany kod.) – apsillers

+0

Co to jest "BaseComponent"? – loganfsmyth

+0

@loganfsmyth to tylko klasa ES6 – Nikos

Odpowiedz

8

związku do sposobu działania klas ES6, nie można rozszerzyć klasy natywnej o przeniesioną klasę. Jeśli twoja platforma obsługuje klasy natywne, moją rekomendacją byłoby, zamiast używania presetu es2015, użyć es2015-node5, zakładając, że jesteś na węźle 5. To spowoduje, że Babel pominie kompilację klas, aby twój kod używał klas natywnych i klas natywnych może rozszerzyć inne klasy natywne.

+0

oh, to naprawdę ogranicza, i tak przenoszę się do kompozycji! – Nikos

+0

@loganfsmyth - Otrzymuję podobny błąd. Mam plik maszynopisu i rozszerzam plik javascript (z powiązanym plikiem typowania). Czy to jest problem, ponieważ maszynopis nie może rozszerzać transpiled pliku javascript i może tylko przedłużyć inny plik maszynopisu? – user911

+1

Po prostu miałem ten sam problem, próbując rozszerzyć klasę TypeScript w CoffeeScript (którą mam przeniesiony przez Babel, ponieważ z jakiegoś powodu Node * nadal * nie obsługuje importów ES6). Moim rozwiązaniem było skonfigurowanie 'babel-preset-env' do kierowania na najnowszą wersję węzła (patrz http://babeljs.io/docs/plugins/preset-env/), to transplikuje tylko instrukcje' import' i wychodzi same zajęcia. – Chris

3

Innym rozwiązaniem jest wykluczenie transform-es2015-classes w .babelrc

presets: [ 
    ["env", { exclude: ["transform-es2015-classes"] }] 
] 
Powiązane problemy