TypeScript class 的访问控制

简介: TypeScript class 的访问控制

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


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

因为 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,但不允许从子类访问成员:

image.png



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


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


image.png


Cross-instance private access

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


c

class A {
  private x = 10;
  public sameAs(other: A) {
    // No error
    return 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 字段。



相关实践学习
云安全基础课 - 访问控制概述
课程大纲 课程目标和内容介绍视频时长 访问控制概述视频时长 身份标识和认证技术视频时长 授权机制视频时长 访问控制的常见攻击视频时长
相关文章
|
5月前
|
JavaScript 前端开发 Java
TypeScript 接口之class接口定义
TypeScript 接口之class接口定义
46 2
|
9月前
|
JavaScript 前端开发 程序员
TypeScript--类(class)
TypeScript--类(class)
|
9月前
|
JavaScript
TypeScript 类(class)与修饰符的详细使用
TypeScript 类(class)与修饰符的详细使用
86 0
|
9月前
|
JavaScript
【typescript入门手册】class 类
【typescript入门手册】class 类
|
JavaScript Java 开发者
ts(typescript) 类(class)初探
当大家看到typescript(ts) 中的类(class)时候,可能好多人都会想起面向对象,对的,面向对象是许多后台的一种编程思想,比如: 本人曾经接触的java, 里面就是用的是面向对象的思想。但是本文不讨论面向对象,值讨论ts 中 class 新增的语法,和一些使用方法以及注意事项。
ts(typescript) 类(class)初探
|
JavaScript 前端开发
|
设计模式 JavaScript
typescript的class类
typescript的class类
|
JavaScript
手摸手一起学习Typescript第五天 - Class 类 / 类与接口
手摸手一起学习Typescript第五天 - Class 类 / 类与接口
|
JavaScript 前端开发 Java
TypeScript 之 Class(下)
TypeScript 的官方文档早已更新,但我能找到的中文文档都还停留在比较老的版本。所以对其中新增以及修订较多的一些章节进行了翻译整理。
156 0
TypeScript 之 Class(下)
|
JavaScript 前端开发 Java
TypeScript 之 Class(上)
TypeScript 的官方文档早已更新,但我能找到的中文文档都还停留在比较老的版本。所以对其中新增以及修订较多的一些章节进行了翻译整理。
180 0
TypeScript 之 Class(上)