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

时间:2017-11-05 16:29:49

标签: angular typescript

我正在检查代码示例,甚至the docs都没有获取任何信息。然后,我谷歌一段时间,仍然没有。

我们为什么要输入

ngOnInit() { ... }

而不是

private ngOnInit() { ... }

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

private ngOnInit() : void { ... }

拥抱TypeScript的全部功能?

修改

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

public ngOnInit() : void { ... }

代替?

2 个答案:

答案 0 :(得分:7)

  

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

TypeScript能够提供上下文类型信息,因此在实现接口时,您无需从界面重复类型。

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

interface OnInit { 
  ngOnInit(): void
}

const example: OnInit = {
   ngOnInit: function () { }   
}

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

Contextual Type Inference

简而言之,TypeScript希望您不必重复不必要的注释。

返回类型兼容性

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

const x: OnInit = {
    ngOnInit: function () {
        return 4;
    }   
}

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

interface OnInit { 
  ngOnInit(): void
}

const x: OnInit = {
    ngOnInit: function (): void {
        return 4;
    }   
}

像这样:

Return type checking

答案 1 :(得分:3)

从Angular调用该方法。 如果它是私人的,它就无法从外面调用。

Angular会忽略返回的值,因此返回类型并不重要。