Javascript ES6 TypeError: конструктор класса Client не может быть вызван без 'new'
У меня есть класс, написанный на 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
11 ответов
Проблема в том, что этот класс расширяет родной класс 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
цель
Я транслировал не Javascript, а Typescript, и столкнулся с той же проблемой.
Я отредактировал конфигурационный файл компилятора Typescript, tsconfig.json
, чтобы сгенерировать код Javascript ES2017:
{
"compilerOptions": {
"target": "ES2017",
вместо того, что по умолчанию, ES2015? - тогда все заработало.
(Возможно, этот ответ может быть полезен для людей, которые используют Typescript и находят этот вопрос, когда ищут такое же сообщение об ошибке, как и я.)
Для тех, кто использует ts-node, возможно, что вашtsconfig.json
не может быть загружен ts-узлом.
Сначала убедитесь, что вы установили параметр ниже дляtsconfig.json
:
{
"compilerOptions": {
"target": "ES6",
...
}
}
Тогда вы можете попробовать ts-node --script-mode
или используйте --project
указать путь к вашему tsconfig.json
.
В package.json
вы можете использовать конфигурацию целей с @babel/preset-env
. установитьesmodules
как "правда".
Ниже приведен пример того, как я использую в своем файле:
"babel": {
"presets": [
[
"@babel/preset-env",
{
"targets": {
"esmodules": true
}
}
],
"@babel/preset-react",
"@babel/preset-flow"
],
"plugins": [
"@babel/plugin-proposal-class-properties"
]
},
Для Angular 9+ это может быть также связано с использованием флагов компиляции машинописного текста:
-
downlevelIteration
-
importHelpers
Подробнее здесьL https://www.typescriptlang.org/tsconfig#downlevelIteration.
Попробуйте использовать эти флаги в своем
tsconfig.josn
:
{
"compilerOptions": {
...
"downlevelIteration": true,
"importHelpers": true,
...
}
}
Без
"importHelpers": true
тоже должно работать.
Это решение в основном предназначено для Angular 9+ и компилятора ngcc — это была проблема, возникающая для Angular 11. Пользовательская конфигурация (пользовательская конфигурация ng-packgr — создание библиотеки Angular CLI было введено в Angular 6) для пакетов поддерживалась, так как был Angular 4+ в проекте. После переноса этих пакетов в библиотеки Angular 9+ (папка проектов) начала возникать ошибка. Я обнаружил, что эти флаги (строго downlevelIteration) решают именно проблему.
Если вы не используете babel и simple typescript. У меня ошибка в материале. Попробуйте уменьшить версии и привести их к похожим версиям. У моих пакетов было множество версий. Я решил проблему, снизив версии пакетов, таких как cdk, material.
Проверьте свой массив "сущностей" в appmodule.ts. Я тоже это пропустил. Когда я сохранил имя объекта, которое используется в запросе, проблема была решена. Надеюсь, этот ответ поможет.
я использовал запись перед своим ObjectId в nextjs, и это сработало.
Решение состоит в том, чтобы понизить версию пакета.
npm удалить connect-mongo
npm я подключаюсь-монго @3
Надеюсь, вы уже смогли решить свою проблему, вот мое решение этой ошибки:
Цитата
class indexRoutes
{
public router: Router= Router();
}
const INDEX_ROUTES = new indexRoutes();
export default INDEX_ROUTES.router;