Javascript ES6 TypeError: конструктор класса Клиент не может быть вызван без "нового" - программирование
Подтвердить что ты не робот

Javascript ES6 TypeError: конструктор класса Клиент не может быть вызван без "нового"

У меня есть класс, написанный на Javascript ES6. Когда я пытаюсь выполнить команду nodemon, я всегда вижу эту ошибку TypeError: Class constructor Client cannot be invoked without 'new'

Полная ошибка указана ниже:

/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45
        return (0, _possibleConstructorReturn3.default)(this, (FBClient.__proto__ || (0, _getPrototypeOf2.default)(FBClient)).call(this, props));
                                                                                                                              ^

TypeError: Class constructor Client cannot be invoked without 'new'
    at new FBClient (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:45:127)
    at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/application/Transaction.js:195:14)
    at Module._compile (module.js:641:30)
    at Object.Module._extensions..js (module.js:652:10)
    at Module.load (module.js:560:32)
    at tryModuleLoad (module.js:503:12)
    at Function.Module._load (module.js:495:3)
    at Module.require (module.js:585:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/Users/akshaysood/Blockchain/fabricSDK/dist/routes/users.js:11:20)

Я пытаюсь создать класс, а затем создать экземпляр этого класса. Затем я пытаюсь экспортировать эту переменную.

Структура класса определена ниже:

class FBClient extends FabricClient{

    constructor(props){
        super(props);
    }

<<< FUNCTIONS >>>

}

Как я пытаюсь экспортировать переменную ->

var client = new FBClient();
client.loadFromConfig(config);

export default client = client;

Вы можете найти полный код здесь> https://hastebin.com/kecacenita.js Код, сгенерированный Babel> https://hastebin.com/fabewecumo.js

4b9b3361

Ответ 1

Проблема в том, что этот класс расширяет родной класс ES6 и переносится на ES5 вместе с Babel. Транспортируемые классы не могут расширять собственные классы, по крайней мере без дополнительных мер.

class TranspiledFoo extends NativeBar {
  constructor() {
    super();
  }
}

приводит к чему-то вроде

function TranspiledFoo() {
  var _this = NativeBar.call(this);
  return _this;
}
// prototypically inherit from NativeBar 

Поскольку классы ES6 должны вызываться только с new, NativeBar.call приводит к ошибке.

Классы ES6 поддерживаются в любой последней версии Node, их нельзя переносить. es2015 следует исключить из конфигурации Babel, предпочтительно использовать предустановку env, установленную на node target.

Ответ 2

Я надеюсь, что вы уже смогли решить свою проблему, вот мое решение для этой ошибки:

Blockquote

class indexRoutes
{

    public  router: Router= Router();
}
const INDEX_ROUTES = new indexRoutes();
export default INDEX_ROUTES.router;