【问题标题】:Typescript classes: Is explicit 'public' modifier a best-practice?打字稿类:显式“公共”修饰符是最佳实践吗?
【发布时间】:2016-08-24 22:37:17
【问题描述】:

在 TS 中,除非指定其他任何内容,否则类成员的默认访问级别是 public。即便如此,使用public 修饰符是否被认为是最佳实践?如果没有别的让代码更明显?

【问题讨论】:

  • 在我看来最好不要写。维护更少,查看更少。此外,不添加它会使受保护和私有成员从公共成员中脱颖而出,因此很容易快速查看是什么。

标签: typescript


【解决方案1】:

这是一个非常主观的话题,没有完美的答案,IMO。但是,我想说,决定答案的一个重要因素是您是否并行使用其他语言,以及 TypeScript 和其他语言之间的默认访问器修饰符是否存在差异。

以 C# 为例。在 C# 中,没有显式访问修饰符的每个属性和字段都是私有的。显然,在 TypeScript 中它是公开的。

如果您碰巧在同一个项目中使用 C# 和 TypeScript,或者只是并行使用,我建议您使用显式访问修饰符,只是为了清楚起见。

【讨论】:

    【解决方案2】:

    我个人确实喜欢每次都列出它。当然,这只是个人喜好问题。如果您确实愿意并且使用 tslint,则可以选择每次强制显式可见性。

    member-access: true
    

    【讨论】:

      【解决方案3】:

      正如其他答案所述,这是一个偏好问题(我更喜欢精简版)。

      如果您使用parameter properties,则显式的public 访问修饰符是强制,以便从给定参数创建和初始化实例成员。

      class Octopus {
          readonly numberOfLegs: number = 8;
          constructor(public name: string, ink: boolean) { }
      }
      
      const o = new Octopus("Lui", true)
      o.name // works
      o.ink // error
      

      【讨论】:

        【解决方案4】:

        明确声明公共访问修饰符的好处是它表明您考虑过它并且您决定它应该是公共的。 缺点是额外的语法会增加噪音,这使得重要的代码更难通过(而且开发人员每次都必须添加额外的语法)。

        我见过好几次应该添加私有修饰符但没有考虑访问修饰符的情况。

        老实说,如果所有内容都默认为私有会更好,并且您必须添加public 才能将其向外界开放。

        就个人而言,我倾向于明确添加它们。

        但是,我认为对于必须公开的内容,使用默认值是可以的(因为我们不必考虑它是否应该是私有的,因为它必须是公开的)。

        示例(对于 Angular)如下: @Input()@Output()@HostListener,并实现了公共方法。

        【讨论】:

          猜你喜欢
          • 2015-03-18
          • 1970-01-01
          • 1970-01-01
          • 2010-11-20
          • 1970-01-01
          • 2021-03-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多