TypeScript 中的类(class)与 JavaScript 的类有何不同?
1. 类型注解
2. 访问修饰符
- TypeScript 支持 public(默认)、private、protected 三种访问修饰符
- private 成员只能在声明它的类内部访问
- protected 成员可以在声明它的类及其子类中访问
- 注意:这些修饰符仅在编译时生效,运行时的 JavaScript 代码中仍可访问所有属性
3. 参数属性
- TypeScript 支持在构造函数中直接声明并初始化属性:constructor(public name: string)
- 等价于先声明属性再在构造函数中赋值,减少了样板代码
- 可与 readonly 修饰符结合使用
4. readonly 属性
- 使用 readonly 修饰符声明的属性只能在声明时或构造函数中赋值
- 编译时检查确保属性不会被意外修改
- 与 JavaScript 的 # 私有字段不同,readonly 不是运行时隐私保护
5. 抽象类
- TypeScript 支持抽象类和抽象方法,强制子类实现特定的行为
- 抽象类不能被直接实例化,只能作为基类被继承
- JavaScript 没有原生的抽象类支持
6. 接口实现
- TypeScript 类可以使用 implements 关键字实现一个或多个接口
- 编译器会检查类是否满足接口的契约
- JavaScript 类无法实现接口
7. 真正的私有字段
- TypeScript 支持 JavaScript 的 # 私有字段语法,提供运行时隐私保护
- # 私有字段在编译后仍保留隐私检查,无法从外部访问
- 与 private 修饰符相比,# 提供了更强的封装性