Tim*_*IDE 0 typescript angular nestjs
我想知道当我在构造函数中注入某些东西时是否需要设置只读?例如 :
constructor(readonly private userService: UserService) { }
Run Code Online (Sandbox Code Playgroud)
您能解释一下这种做法的用处(或没有用处)吗?
简而言之:通常您不需要在 DI 中只读,因为您处理注入的服务,并且类型安全可以保护您免于分配新值。
详细信息: 首先,如果你想使用private和readonly,那就是
private readonly userService: UserService
Run Code Online (Sandbox Code Playgroud)
所以 readonly 位于 private 之后。
然后注意公共/私有/受保护和只读之间的区别。
公共/私有/受保护与可见性有关。
另一方面,只读是指您是否希望某人无法更改它。
简单的例子:
private amountOfPizzas = 1;
private readonly stomachSize = 2;
public eat(numberOfPizzas: number): void {
if(this.stomachSize < numberOfPizzas) {
this.stomachSize = numberOfPizzas; // will throw an error
}
this.amountOfPizzas = numberOfPizzas; // works
eat(); // ..
}
Run Code Online (Sandbox Code Playgroud)
这也适用于 100% 依赖注入。
当你以私有 userService: UserService的方式注入一个Service时,那么这个变量是可以改变的。然而,由于 Typescript 它只能被分配一个新的 UserService 实例,所以如果你设置只读或不设置它并没有太大的区别。
但是,假设您将注入另一个令牌,例如:
constructor(private numberOfPizzas: number) {}
Run Code Online (Sandbox Code Playgroud)
那么它并不是真正被注入的服务,我想知道这是否真的有效。但我们假设它确实如此......或者出于任何原因,编译器没有发现错误,然后在类中我们可以为它分配一个新值。这很可能不是您真正想要的。坏的。
更危险的是,如果您使用公共可见性,那么当然会有更多地方能够更改此变量 - 因此将更难确定问题来自何处。
| 归档时间: |
|
| 查看次数: |
4929 次 |
| 最近记录: |