private 关键字如何让我们同时声明和初始化 class 实例?

How does the private keyword let us both declare and initialize a class instance?

我在看the Nest.js documentation,有一行不太明白

我们使用 CatsController 的构造函数自定义它,因此当 IoC 容器创建 catsController 实例时,它是使用 catsService 实例作为构造函数参数创建的。至少这是我基于整个文档的最佳猜测。但以下内容到底是什么意思:

Notice the use of the private syntax. This shorthand allows us to both declare and initialize the catsService member immediately in the same location.

为什么 private 关键字可以做到这一点?如果我们不使用 shorthand 语法会怎样?

在这两种情况下,CatsService 的初始化都是由 Nest.js 完成的,这是它所依赖的 IoC 的关键前提之一。 private 关键字在构造函数声明中的使用是完全可选的,对于在初始化期间使构造函数参数成为 CatsController 的属性很有用。没有它,你应该写:

@Controller('cats')
export class CatsController {
  private catsService: CatsService;
  
  constructor(service: CatsService) {
    this.catsService = service;
  }
  /* TODO */
}

看看 private 关键字如何将 catsService 声明为 class 的私有属性,如果我们在构造函数参数声明中使用它,它将具有相同的含义,导致更小和更简单的代码。 最后,这是Typescript的句法特性,与NestJS或DI无关