Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何创建不带“的类的实例”;新";关键词_Javascript_Node.js_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 如何创建不带“的类的实例”;新";关键词

Javascript 如何创建不带“的类的实例”;新";关键词,javascript,node.js,typescript,ecmascript-6,Javascript,Node.js,Typescript,Ecmascript 6,此项目是带有TypeScript的NodeJS项目 我想创建App类的实例。但是,如果我使用new关键字,我必须传递构造函数参数 问题是构造函数参数应该与依赖项注入一起传递。因此,我不能使用new关键字来创建实例 // Express import { application as app } from 'express'; // Controllers import { UserController } from './controllers/user.controller' export

此项目是带有TypeScript的NodeJS项目

我想创建App类的实例。但是,如果我使用
new
关键字,我必须传递构造函数参数

问题是构造函数参数应该与依赖项注入一起传递。因此,我不能使用
new
关键字来创建实例

// Express
import { application as app } from 'express';

// Controllers
import { UserController } from './controllers/user.controller'

export class App {
  constructor(userController: UserController) {
    console.log("App is running");
    console.log("UserController url path is : ", userController.getUrlPath);

    this.run();
  }

  run(): void {
    app.listen(3000, function () {
      console.log('App is running on port 3000!');
    });
  }

  check(): void {
    console.log("working well");
  }
}

const appInstance: App = <App>Object.create(App.prototype); // it is not creating

console.log( appInstance.check() ); // ==> 'undefined'
//Express
从“express”导入{application as app};
//控制器
从“./controllers/user.controller”导入{UserController}
导出类应用程序{
构造函数(userController:userController){
console.log(“应用程序正在运行”);
log(“UserController url路径为:”,UserController.getUrlPath);
这个。run();
}
run():void{
应用程序侦听(3000,函数(){
log('应用程序正在端口3000上运行!');
});
}
check():void{
控制台日志(“工作良好”);
}
}
const-appInstance:App=Object.create(App.prototype);//这不是创造
console.log(appInstance.check());//=>'未定义的'

这似乎与使用类的概念背道而驰
如果出于测试目的需要避免传递具体的
UserController
,可以使用某种形式的mock。
另一种选择是使用
any
类型的变量:

const app = new App({} as any);
根据您的
tsconfig.json
配置,它应该可以工作(显然您将无法访问
UserController
对象的任何函数/字段,但是
App
的构造应该可以正常工作。
最后一个选项(至少我可以想到)是为
UserController
使用setter函数:

export class App {
 private _userController: UserController;
 get userController(): UserController {
  return this._userController;
 }
 set userController(ctrl: UserController) {
  this._userController = ctrl;
 }
}

这样,在设置了完整的DI基础设施之后,您可以使用
App.userController=SOME\u USER\u CONTROLLER\u FROM\u DI

这似乎与使用类的概念背道而驰
如果出于测试目的需要避免传递具体的
UserController
,可以使用某种形式的mock。
另一种选择是使用
any
类型的变量:

const app = new App({} as any);
根据您的
tsconfig.json
配置,它应该可以工作(显然您将无法访问
UserController
对象的任何函数/字段,但是
App
的构造应该可以正常工作。
最后一个选项(至少我可以想到)是为
UserController
使用setter函数:

export class App {
 private _userController: UserController;
 get userController(): UserController {
  return this._userController;
 }
 set userController(ctrl: UserController) {
  this._userController = ctrl;
 }
}

这样,在建立完整的DI基础设施之后,您可以使用
App.userController=SOME\u USER\u CONTROLLER\u FROM\u DI

您想在不调用构造函数的情况下实例化它吗?这对我来说似乎很奇怪。您不能先实例化userController,然后在构建应用程序类时将其传递进来吗?@JustusRomijn问题iUserController的构造函数有一些参数。参数的构造函数有参数。因此,它就像:新应用程序(新UserController(新UserRepository(新BaseRepository(新Blablabla)))这些参数应该随依赖项注入一起提供(自动)。但我无法创建此应用程序类。忽略
new
不是您的解决方案。在使用依赖项注入时,您仍然必须首先使用“new”创建这些依赖项。或者您可以使用单独的类来管理您的依赖项。您想在不调用构造函数的情况下实例化它吗?这对我来说似乎很奇怪。您不能实例化吗首先触发UserController,并在构造应用程序类时将其传入?@JustusRomijn问题是UserController的构造函数有一些参数。而参数的构造函数有参数。因此,它就像:new App(new UserController(new UserRepository(new BaseRepository(new BlaBla)))参数应该随依赖项注入一起提供(自动)。但我无法创建此应用程序类。忽略
new
不是您的解决方案。使用依赖项注入时,您仍然必须先使用“new”创建这些依赖项。或者,您可以使用单独的类来管理依赖项。