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
Ответы
Ответ 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;