默认的控制权限是 public.public 属性的字段和方法,可以在 class 外部被访问。

class Greeter {public greet() {console.log("hi!");}
}
const g = new Greeter();
g.greet();

因为 public 已经是默认的可见性修饰符,所以你不需要将它写在类成员上,但可能出于样式/可读性原因选择这样做。

protected

受保护的成员仅对声明它们的类的子类可见。

Exposure of protected members

派生类需要遵循其基类契约,但可以选择公开具有更多功能的基类子类型。 这包括公开受保护的成员:

class Base {protected m = 10;
}
class Derived extends Base {// No modifier, so default is 'public'm = 15;
}
const d = new Derived();
console.log(d.m); // OK

请注意,Derived 已经能够自由地读取和写入 m,因此这不会有意义地改变这种情况的“安全性”。 这里要注意的主要事情是,在派生类中,如果这种暴露不是故意的,我们需要小心地重复受保护的修饰符。

private

private 类似于 protected,但不允许从子类访问成员:

上述例子表明我们不能在子类里将父类的 private 属性提升成 protected 或者 public.

子类也无法访问父类的 private 字段。

Cross-instance private access

在 TypeScript 类实例内部,一个实例能访问其他实例的私有字段吗?答案是可以。

class A {private x = 10;public sameAs(other: A) {// No errorreturn other.x === this.x;}
}

TypeScript class 访问控制的镜花水月

与 TypeScript 类型系统的其他方面一样,private 和 protected 仅在类型检查期间强制执行。 这意味着 JavaScript 运行时构造(如 in 或简单属性查找)仍然可以访问私有或受保护成员。

class MySafe {private secretKey = 12345;
}
Try
// In a JavaScript file...
const s = new MySafe();
// Will print 12345
console.log(s.secretKey);

上面这段 TypeScript 代码虽然有语法错误,但是编译成 JavaScript 之后,仍然能够成功执行,访问到 s 的 secretKey 字段。

更多Jerry的原创文章,尽在:“汪子熙”:

TypeScript class 的访问控制相关推荐

  1. TypeScript 从听说到入门(上篇)

    我为什么会这样念念又不忘 / 你用什么牌的箭刺穿我心脏 我也久经沙场 / 戎马生涯 / 依然 / 被一箭刺伤 --李荣浩<念念又不忘> 接下来我会分上.下两篇文章介绍 TypeScript ...

  2. TypeScript技术知识整理

    TypeScript技术知识整理 文章目录 TypeScript技术知识整理 一.环境搭建与编译执行 1.安装 `TypeScript` 编译器 2.编写代码 **代码编辑器 - vscode** 3 ...

  3. TypeScript (TS

    1.Node卸载 1)控制面板卸载 2)安装位置删除文件夹 3)c盘用户 下去删除.npmrc文件 2.下载Nodejs 最新下载地址: 下载 | Node.js 中文网 安装: 双击打开,下一步,同 ...

  4. TypeScript笔记(基础大全到井格游戏案例)

    TypeScript学习笔记 参考文档 参考视频 一.介绍 TypeScript(Typed JavaScript at Any Scale):添加了类型系统的 JavaScript,适用于任何规模的 ...

  5. TypeScript 接口和TypeScript类

    目录 一.TypeScript 接口 1.TypeScript 接口的定义和简单使用 2.联合类型和接口 3.接口和数组 4.接口继承 二.TypeScript 类 1.TypeScript 类的定义 ...

  6. TypeScript 全面介绍

    目录 TS(TypeScript) 1. TS的安装和配置 2. 第一个TS程序(举例) 3. 配置自动编译 4. 变量声明 5. 函数 6. 重载 7. class 8. 接口 9. 模块化开发 T ...

  7. TypeScript 基础类型+函数+接口+类

    1.简介: TypeScript 是 JavaScript 的一个超集.由微软开发的自由和开源的编程语言.设计目标是开发大型应用.是一种面向对象的编程语言,遵循强类型 javascript与types ...

  8. TypeScript入门基础

    文章目录 1 TypeScript介绍 1.1 什么是TypeScript? 1.2 为什么需要 TypeScript 1.3 JS与TS的相关知识 1.4 TypeScript特性 1.5 Type ...

  9. TypeScript与Vue组合开发记录点(一)

    TypeScript与Vue组合开发记录点 TypeScript使用Vue-property-decorator属性装饰器 @Component(options:ComponentOptions = ...

最新文章

  1. oracle sql判断相等,获取多行相等的人员(Oracle SQL)
  2. 微信链接里的图像如何得到更清晰
  3. 核桃编程 | 前端可观测性建设之路
  4. XML—— 验证XML文档
  5. 一文搞懂 什么是CPU上下文?为什么要切换?如何减少切换?
  6. arcmap shp导出cad无反应_如何使用ArcMap将Excel数据转换为shp数据
  7. AI时代的稀缺人才:解读数据科学家成长的4个阶段
  8. 用5毛特效,让1000万人上瘾!这群乡村大妈,打了所有流量明星的脸
  9. 京东618期间将累计发放百亿消费券
  10. centos配置epel和remi源
  11. linux 怎么格式化u盘写保护,u盘写保护如何解除?去掉保护模式的具体方法
  12. 各位大佬,Spark的重点难点系列暂时更新完毕
  13. 【吐槽】那些让人“口吐芬芳”的App登录骚操作
  14. 利用MTviz绘制线粒体基因组结构图
  15. Visual Studio 类向导HRESULT:0x80070057 (E_INVALIDARG)的异常的解决方案
  16. PDF如何在线翻译?PDF在线翻译的方法
  17. win10下yolov3训练自己的数据集
  18. Java基本类型介绍
  19. Cannot find any credentials with id 283d811e-7a65-4977-b560-9c66555e19d6
  20. puppeteer做页面监控

热门文章

  1. python 决策树 math库 c45算法
  2. 人民日报“权威认证”吃鸡装备哪家强,不服来辩!
  3. Android知识点剖析系列:深入了解layout_weight属性
  4. 将RGB转换成ToWin32值
  5. 剖析Disruptor:为什么会这么快?(一)锁的缺点
  6. [算法系列之二十六]字符串匹配之KMP算法
  7. spring源码读书笔记(1)
  8. HDU 3400 Line belt【三分法】
  9. python学习04
  10. 团队作业—系统设计和任务分配