不允许使用Angular2多个构造函数实现TS2392

时间:2016-12-07 22:06:34

标签: angular

如何在组件中使用多个构造函数?目前我收到错误:

  

'不允许多个构造函数实现'。

questions: any[];
constructor( service: QuestionSignupStepOneService ) { 
    this.questions = service.getQuestions(); 
}
constructor( service: QuestionSignupStepOneAService ) { 
    this.questions = service.getQuestions(); 
}

无论如何要简化我想要做的事情吗?代码编译正确,但只会运行第一个服务,忽略第二个。

2 个答案:

答案 0 :(得分:5)

使用相同参数制作多个构造函数并不合理,除非它们具有不同的类型,在Typescript中您可以执行以下操作:

class Foo {
  questions: any[];
  constructor(service: QuestionSignupStepOneService, param2?: Param2Type) { 

    this.questions = service.getQuestions(); 
    if(param2){
        console.log(param2);
    }
  }
}

这等于两个构造函数,第一个是new Foo(service),第二个是new Foo(service, param2)

使用?表明该参数是可选的。

如果您希望两个构造函数具有相同的参数但是对于不同的类型,您可以使用它:

class Foo {
  questions: any[];
  constructor(service: QuestionSignupStepOneService | QuestionSignupStepOneAService) {

    if(typeof(service) === QuestionSignupStepOneService){
       this.questions = service.getQuestions(); 
    }
    else{
        this.questions = service.getDifferentQuestions(); 
    }
  }
}

答案 1 :(得分:0)

我最后得到了这个(语法上是正确的,但尚不知道它是否可以工作):

  constructor(private _myService: MyService, private _myOtherService: MyOtherService) {
    super(_myService);
    this.dataSource = new MyThingDataSource(this._myOtherService);
    }