2016-12-21 2 views
1

test1.jsES6 экспорта/импорта несколько классов - InstanceOf возвращает ложные

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) 

Когда я запускаю test2 выход false (true ожидается).

ответ

2

Проблема не import. Это Вавилон. Наследование встроенных классов - ES6 feature. Это не сработает в преобразованном коде ES5.

Приведенный выше код, скорее всего, приведет к inst в качестве дополнения ValidationError и к примеру Error.

Решение заключается в том, чтобы не передавать объекты, которые уже поддерживаются узлом. Следует использовать пользовательский пресет, например. babel-preset-es2015-node6 или babel-preset-eslatest-node6.

+0

Perfect - он работает! Тем временем я нашел другое решение - вместо расширения собственного класса ошибок можно расширить https://www.npmjs.com/package/es6-error. Но ваше решение явно лучше, потому что оно не требует дополнительных зависимостей. – user606521

+0

Неужели 'es6-error' работает для вас в этом случае? Это может вызвать ту же проблему с 'instanceof'. – estus

+0

Да, при расширении «es6-error» вместо «Error» это работает. – user606521

 Смежные вопросы

  • Нет связанных вопросов^_^