当前位置: 首页 > news >正文

typescript 中的访问修饰符

        在 TypeScript 中,访问修饰符(Access Modifiers)用于控制类成员的可见性和访问权限,增强代码的封装性和安全性。主要修饰符包括 publicprivateprotected,它们定义了成员在不同作用域的可访问性。

1. API 定义

访问修饰符在 TypeScript 中作为类成员的前缀关键字使用,它们定义了成员的访问范围:

  • public:默认修饰符。成员在任何地方可访问(包括类内部、实例、派生类和其他代码)。

  • private:成员只能在声明它的类内部访问,不能在实例、派生类或外部代码中直接访问。

  • protected:成员可以在声明它的类及其派生类中访问,但不能在外部代码或非派生类中访问。

  • 默认行为:如果不显式指定修饰符,成员默认为 public,但作用域等同于包内公开(同包可访问),包外私有(仅类内可访问)。

        这些修饰符在编译时由 TypeScript 编译器处理,但在 JavaScript 运行时无等效语法,需通过闭包或约定模拟。

2. 具体使用方式

        通过代码示例演示每个修饰符的用法。假设我们有一个基类 Person 和一个派生类 Employee,展示不同修饰符的访问限制。

示例代码:

class Person {// public 成员:默认,任何地方可访问public name: string;// private 成员:仅类内部可访问private id: number;// protected 成员:类内部及派生类可访问protected age: number;constructor(name: string, id: number, age: number) {this.name = name;this.id = id;this.age = age;}// public 方法:可外部调用public displayInfo(): void {console.log(`Name: ${this.name}, ID: ${this.id}, Age: ${this.age}`);}// private 方法:仅类内部使用private logId(): void {console.log(`ID: ${this.id}`);}
}class Employee extends Person {constructor(name: string, id: number, age: number) {super(name, id, age);}public showAge(): void {// protected 成员在派生类中可访问console.log(`Age: ${this.age}`);// private 成员在派生类中不可访问(编译错误)// console.log(this.id); // Error: Property 'id' is private and only accessible within class 'Person'[^5]}
}// 测试访问修饰符
const person = new Person("Alice", 1001, 30);
person.displayInfo(); // 输出: Name: Alice, ID: 1001, Age: 30(public 方法可访问)// public 成员可外部访问
console.log(person.name); // 输出: Alice// private 成员外部访问报错
// console.log(person.id); // Error: Property 'id' is private and only accessible within class 'Person'[^3]// protected 成员外部访问报错
// console.log(person.age); // Error: Property 'age' is protected and only accessible within class 'Person' and its subclasses[^4]const employee = new Employee("Bob", 1002, 35);
employee.showAge(); // 输出: Age: 35(protected 成员在派生类中可访问)

关键点解析:

  • public 使用name 成员和 displayInfo 方法可被任何代码访问,适合公开接口。

  • private 使用id 成员只能在 Person 类内部使用(如 displayInfo 方法中),外部或派生类访问会触发编译错误,确保数据封装。

  • protected 使用age 成员在 PersonEmployee 中可访问,但外部不可访问,适合继承场景。

  • 默认行为:如果不写修饰符(如 name 未显式声明),则等同于 public

3. 总结

访问修饰符是 TypeScript 实现面向对象封装的核心机制,以下是关键总结:

  • 作用域比较(基于引用):

    修饰符当前类同包子类其他派生类外部代码
    public
    protected×
    private×××
    默认××
  • 最佳实践

    • 使用 private 隐藏内部实现细节,防止意外修改。

    • 使用 protected 在继承体系中共享成员,避免外部访问。

    • 优先用 public 定义公共 API,保持代码简洁(默认行为)。

  • 编译与运行时:TypeScript 在编译时检查修饰符,但 JavaScript 无原生支持,编译后可能通过闭包模拟私有性(如 WeakMap)。

  • 适用场景:大型项目需要严格封装时(如类库开发),访问修饰符能减少错误并提升代码可维护性。

通过合理使用这些修饰符,开发者可以构建更健壮、可扩展的 TypeScript 应用。

http://www.xdnf.cn/news/1372663.html

相关文章:

  • 工业数据消费迎来“抖音式”革命:TDengine IDMP 让数据自己开口说话
  • 利用3台机器搭建Kubernetes集群
  • 工业大模型五层架构全景解析:从算力底座到场景落地的完整链路
  • 《分布式任务调度中“任务重复执行”的隐性诱因与根治方案》
  • 算法练习-合并两个有序数组
  • Java大厂面试全真模拟:从Spring Boot到微服务架构实战
  • HTML应用指南:利用GET请求获取中国银行人民币存款利率数据
  • 【系统架构设计(二)】系统工程与信息系统基础中:信息系统基础
  • 数据结构青铜到王者第四话---LinkedList与链表(1)
  • [Mysql数据库] 知识点总结3
  • 深度学习:卷积神经网络(CNN)
  • Docker中如何记录非交互式连接ssh用户操作的所有命令记录?
  • QT(QTableWidget)
  • 机器学习:前篇
  • Linux系统的网络管理(二)
  • SELinux相关介绍
  • 质押、ETF、财库三箭齐发:以太坊价值逻辑的重构与演进
  • [灵动微电子 霍尔FOC MM32BIN560C]从引脚到应用
  • Ubuntu操作系统下使用mysql、mongodb、redis
  • 系统架构设计师-【2025上半年论文题目分享】
  • 探寻跨语言统一真理及其对NLP的未来启示
  • Agent实战教程:LangGraph关于智能体的架构模式与核心概念
  • 知行——同为科技24周年庆典
  • 【软件测试面试】全网最全,自动化测试面试题总结大全(付答案)
  • 二维费用背包 分组背包
  • Git命令
  • 机器学习每日一题000-矩阵和向量的乘法python实现
  • 在Excel和WPS表格中输入分数的两种方法
  • Linux正则表达式
  • shiro进行解密