TypeScript class 私有字段 写法区别请教?

class Name {
  #n:number
  private c :number
  constructor() {
    this.#n = 0
    this.c = 0
  }
  get k():Function{
    return (e: any)=>{console.log(e);
    }
  }
}

let name1 = new Name()
name1.k('asdasd')
name1.c
name1.#n

其中 #nc 两个写法是同样作用吗

阅读 1.6k
2 个回答

private 是个语法糖,假私有,仅仅是 TSC 代码提示上阻止你外部访问成员,你要是强行 ignore、或者已经编译成 JS 了,这个成员还是外部可访问的。

# 是 ES2020 新增的特性,从底层真正支持的私有成员。不过目前还是草案,浏览器支持度不高。

考虑到大部分项目都得 babel 转译成低版本语法再部署,即便 # 修饰的私有成员最后也得被转译成普通成员,所以现阶段也可以认为二者没区别。

https://developer.mozilla.org...

两者都是私有变量,都无法再外部进行访问,题中的name1.c和name.#n都是会报错的,但是生成的name1打印出来是{c:0},也就是再外部能够看到private的值但是看不到#n的值

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进