2016-12-21 1 views
1

test1.js kehrtes6 Export/Import mehrere Klassen - instanceof den falschen

export class ValidationError extends Error { 
    constructor (msg) { 
    super(msg) 
    } 
} 

export class ServerError extends Error { 
    constructor (msg) { 
    super(msg) 
    } 
} 

test2.js

import * as errors from './test1' 

const inst = new errors.ValidationError('msg') 

console.log(inst instanceof errors.ValidationError) 

Wenn ich laufen test2 der Ausgang false (true erwartet) ist.

Antwort

2

Das Problem ist nicht import. Es ist Babel. Die Vererbung von integrierten Klassen ist ES6 feature. Es wird nicht gut in transpiliertem ES5-Code funktionieren.

Der obige Code wird wahrscheinlich inst als ein Mix von ValidationError und eine Instanz von Error ergeben.

Die Lösung besteht darin, die Funktionen, die bereits von Node unterstützt werden, nicht zu übertragen. Eine benutzerdefinierte Voreinstellung sollte verwendet werden, z. babel-preset-es2015-node6 oder babel-preset-eslatest-node6.

+0

Perfekt - es funktioniert! In der Zwischenzeit habe ich eine andere Lösung gefunden - anstatt die native Error-Klasse zu erweitern, ist es möglich, https://www.npmjs.com/package/es6-error zu erweitern. Aber Ihre Lösung ist offensichtlich besser, weil sie keine zusätzlichen Abhängigkeiten erfordert. – user606521

+0

Hat 'es6-error' in diesem Fall für Sie funktioniert? Es könnte das gleiche Problem mit "instanceof" treffen. – estus

+0

Ja, wenn "es6-error" anstatt "Error" erweitert wird, funktioniert es. – user606521