Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
设置方法中的只读字段,而不是构造函数-typescript_Typescript - Fatal编程技术网

设置方法中的只读字段,而不是构造函数-typescript

设置方法中的只读字段,而不是构造函数-typescript,typescript,Typescript,我有这门课 class Foo { private readonly serviceA : AService; private readonly serviceB : BService; private readonly serviceC : CService; ... constructor() { this.setupService(); ... } private setupServi

我有这门课

class Foo { 

     private readonly serviceA : AService;
     private readonly serviceB : BService;
     private readonly serviceC : CService;
     ...

    constructor() {
        this.setupService();
        ...
    }


    private setupService() : void {
         this.serviceA = new ServiceA(...);
         this.serviceB = new ServiceB(...);
         ...
    }

}
如您所见,我想使用
setupServices
方法设置字段,该方法将仅从承包商调用。当然,这将无法编译,但我想知道是否有办法解决这个问题

我想用这个来清理承包商

我能做到

constructor() {
    this.serviceA = new AService(...);
    this.serviceB = new BService(...);
    ...
}

但是,当我有许多服务时,这将产生巨大影响

您可以改用类字段:

class Foo { 
    private readonly service1 = new Service1();
    private readonly service2 = new Service2();
    private readonly service3 = new Service3();
}
另外,这还消除了显式类型注释的需要

但当我有很多服务的时候,这将是一个巨大的挑战

如果你有一个大的数字,考虑使用一个数组代替,这可能会比一个完整的多个单独的属性名称更好。如果没有类字段,这可能看起来像:

class Foo {
  // type could be made more precise via tuple if needed
  private readonly services: ServiceObj[];
  constructor() {
    this.services = this.makeServices();
  }
  makeServices() {
    // create and return array of services
  }
}

谢谢你的回答,你的建议很好。在使用数组的情况下,我认为这不会有用,因为不同类型的服务,我还应该为我想要使用的每个服务提供const索引值使用类装饰器可能是一种替代方法。我不知道这是否是一个更优雅的解决方案,但它可能会让你的课堂更整洁。