NodeJS Javascript ES6类型错误:没有“new”就无法调用类构造函数Client

2nc8po8w  于 2023-02-03  发布在  Node.js
关注(0)|答案(9)|浏览(281)

我有一个用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;

你可以在这里找到完整的代码--〉Link。由Babel生成的代码--〉Link

yfwxisqw

yfwxisqw1#

问题是这个类扩展了原生ES6类,用Babel移植到ES5,移植类不能扩展原生类,至少没有额外的措施。

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

结果就像

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

由于ES6类只能使用new调用,因此NativeBar.call会导致错误。
ES6类在任何最新的Node版本中都受支持,不应对其进行翻译。es2015应排除在Babel配置之外,最好使用env preset set to node target
同样的问题applies to TypeScript。编译器应该被正确配置为不传输类,以便它们从本机或Babel类继承。

r1wp621o

r1wp621o2#

我不是在使用Javascript,而是在使用Typescript,遇到了同样的问题。
我编辑了Typescript编译器配置文件tsconfig.json,以生成ES 2017 Javascript代码:

{
    "compilerOptions": {
        "target": "ES2017",

而不是默认的ES 2015?-然后一切都运行良好。
(也许这个答案对使用Typescript的人会有帮助,当他们像我一样搜索相同的错误消息时会找到这个问题。)

fnatzsnv

fnatzsnv3#

对于使用ts-node的用户,可能是您的tsconfig.json无法通过ts-node加载。
1.确保您已为tsconfig.json设置了以下选项:

{
        "compilerOptions": {
            "target": "ES6",
            ...
        }
    }

1.尝试使用ts-node --script-mode--project指定tsconfig.json的路径。

plicqrtu

plicqrtu4#

package.json中,您可以使用@babel/preset-env的目标配置。将esmodules设置为“true”。
下面是我如何在文件中使用的示例:

"babel": {
    "presets": [
      [
        "@babel/preset-env",
        {
          "targets": {
            "esmodules": true
          }
        }
      ],
      "@babel/preset-react",
      "@babel/preset-flow"
    ],
    "plugins": [
      "@babel/plugin-proposal-class-properties"
    ]
  },
xpszyzbs

xpszyzbs5#

对于Angular 9+,这可能也是使用typescript编译标志的问题:

  • downlevelIteration
  • importHelpers

更多信息请访问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+库后(项目文件夹)错误开始发生。我发现这些标志(sctrictly downlevelIteration)完全解决了问题。

eqoofvh9

eqoofvh96#

如果你没有使用babel和simple typescript.我在material中得到了错误.试着减少版本并把它们降低到相似的版本.我的包有各种各样的版本.我通过降低像cdk,material这样的包的包版本来解决这个问题.

vdgimpew

vdgimpew7#

在我的情况下,这是观察员从“mobx-react-lite”。

irtuqstp

irtuqstp8#

检查appmodule.ts中的“entities”数组。我也忽略了这一点。当我保留查询中使用的实体名称时,问题解决了。希望这个答案能有所帮助。

pkmbmrz7

pkmbmrz79#

我希望你已经能够解决你的问题,这里是我的解决这个错误:

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

相关问题