You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript私有属性命名最佳实践及是否需设置get/set方法

TypeScript私有属性命名最佳实践与get/set方法的使用建议

嘿,我来聊聊这个问题——毕竟在TypeScript里处理私有属性确实容易纠结,尤其是看了官方编码指南之后,很容易对之前的习惯产生疑问。先拆解成两部分来说:

一、私有属性的命名最佳实践

TypeScript里其实有两种“私有”属性的实现方式,对应的命名习惯也不一样:

  • 使用private修饰符(编译时私有):这种方式在编译后的JavaScript代码里,属性其实还是可以被外部访问的(毕竟早期JS没有真正的私有字段)。官方指南和社区的通用做法是给这类属性加上下划线前缀_,比如_userName。这么做的核心是视觉标识,让所有开发者一眼就能认出这是个内部私有属性,不要直接去修改它,即使技术上能做到。
  • 使用#前缀的真正私有字段(运行时私有):这是ES6+标准的私有字段,运行时完全无法从外部访问。这种情况下就不需要再加下划线了,直接用#userName就行——#本身已经是明确的私有标识,再加下划线反而画蛇添足。

最重要的一点是:团队内部要保持一致性。不管选哪种风格,全团队统一执行,比纠结“哪种更正确”要重要得多。

二、是否要统一给私有属性加get/set方法?

答案是:完全没必要统一,按需使用就好。分几种场景来看:

  • 需要控制访问逻辑时,必须加:如果私有属性需要对外暴露,但你要限制它的读取或修改行为——比如修改时要做参数验证、格式转换,或者读取时要返回计算后的值,那get/set就是刚需。举个例子:
    class Product {
      private _price: number;
    
      get price(): number {
        // 返回时加上税
        return this._price * 1.13;
      }
    
      set price(value: number) {
        // 验证价格不能为负数
        if (value < 0) throw new Error("价格不能为负数");
        this._price = value;
      }
    }
    
  • 仅内部使用的私有属性,别加:如果某个属性只是类内部逻辑用,完全不需要对外暴露,加get/set纯粹是增加冗余代码,毫无意义。
  • 需要只读暴露时,只加get方法:如果想让外部能读取属性,但不能修改,只写get方法就够了。比如用真正私有字段的场景:
    class User {
      #id: string;
    
      get id(): string {
        return this.#id;
      }
    
      constructor(id: string) {
        this.#id = id;
      }
    }
    
    这样外部只能读id,没法修改,比用公共属性更安全。

最后想说,官方的编码指南是参考而非强制规范,适合大部分场景,但团队可以根据自己的业务和习惯调整。核心始终是代码的可读性、可维护性,以及团队协作的顺畅性。

内容的提问来源于stack exchange,提问作者Stephen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:13:48