为什么Angular中的ngOnInit不是私有的?

Don*_*ana 4 typescript angular

我正在检查代码示例,甚至文档都没有得到任何信息.然后,我谷歌一段时间,仍然没有.

我们为什么打字

ngOnInit() { ... }
Run Code Online (Sandbox Code Playgroud)

代替

private ngOnInit() { ... }
Run Code Online (Sandbox Code Playgroud)

或者,就此而言,只要我抱怨这个话题

private ngOnInit() : void { ... }
Run Code Online (Sandbox Code Playgroud)

拥抱TypeScript的全部力量?

编辑

根据评论我需要扩展问题.我们为什么不写:

public ngOnInit() : void { ... }
Run Code Online (Sandbox Code Playgroud)

代替?

Gün*_*uer 8

该方法是从 Angular 调用的。如果是私有的,则无法从外部调用。

Angular 会忽略返回值,因此返回类型无关紧要。


Fen*_*ton 7

根据评论我需要扩展问题.我们为什么不写: public ngOnInit() : void { ... } 相反?

TypeScript能够提供上下文类型信息,因此在实现接口时,不需要从接口重复类型.

例如,如果您考虑以下缩短的示例:

interface OnInit { 
  ngOnInit(): void
}

const example: OnInit = {
   ngOnInit: function () { }   
}
Run Code Online (Sandbox Code Playgroud)

如果将鼠标悬停在上面,ngOnInit您将看到返回类型已经无效,因为它已根据情况为您推断出返回类型.

上下文类型推断

简而言之,TypeScript希望避免重复不必要的注释.

返回类型兼容性

有一种情况可能会让您考虑添加返回类型注释.如果没有注释,则允许以下内容:

const x: OnInit = {
    ngOnInit: function () {
        return 4;
    }   
}
Run Code Online (Sandbox Code Playgroud)

OnInit接口的特定情况下,这不会导致任何问题,因为忽略了返回类型.但是,如果您想要告知您的返回类型看起来不正确,那么注释会为您提供其他信息:

interface OnInit { 
  ngOnInit(): void
}

const x: OnInit = {
    ngOnInit: function (): void {
        return 4;
    }   
}
Run Code Online (Sandbox Code Playgroud)

像这样:

返回类型检查