2016-04-12 11 views
5

Sto usando babel per transpolare.Errore Babel: costruttore di classi Foo non può essere invocato senza 'nuovo'

I have class BaseComponent che viene esteso da class Logger.

Quando eseguo new Logger() nel browser, sto ottenendo questo errore

costruttore della classe BaseComponent non può essere invocato senza 'nuova'

il codice che genera questa è:

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

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

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

È questo l'uscita di Babele, o il codice che avete scritto? (Se viene emesso, mostra il codice che hai scritto.) – apsillers

+0

Che cos'è 'BaseComponent'? – loganfsmyth

+0

@loganfsmyth è solo una classe ES6 – Nikos

risposta

8

causa per il modo in cui funzionano le classi ES6, non è possibile estendere una classe nativa con una classe transpiled. Se la tua piattaforma supporta le classi native, la mia raccomandazione sarebbe, invece di usare il preset es2015, usare es2015-node5, assumendo che tu sia sul Nodo 5. Ciò farà sì che Babel salti la compilazione di classi in modo che il tuo codice usi classi native e classi native può estendere altre classi native.

+0

oh, questo è davvero limitante, mi sto spostando comunque alla composizione! – Nikos

+0

@loganfsmyth - Ricevo un errore simile. Ho un file dattiloscritto e sta estendendo un file javascript (con file di battitura associato). È un problema perché il typescript non può estendere il file javascript transpiled e può estendere solo un altro file dattiloscritto? – user911

+1

Ho appena avuto lo stesso problema, cercando di estendere una classe TypeScript in CoffeeScript (che sto trasmettendo da Babel perché per qualche ragione Node * still * non supporta le importazioni ES6). La mia soluzione era configurare 'babel-preset-env' per indirizzare l'ultima versione del nodo (vedi http://babeljs.io/docs/plugins/preset-env/), questo traspone solo le istruzioni' import' e lascia solo le classi. – Chris

3

Un'altra soluzione è esclude transform-es2015-classes in .babelrc

presets: [ 
    ["env", { exclude: ["transform-es2015-classes"] }] 
] 
Problemi correlati