设置方法中的只读字段,而不是构造函数-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索引值使用类装饰器可能是一种替代方法。我不知道这是否是一个更优雅的解决方案,但它可能会让你的课堂更整洁。