TypeScript 访问修饰符
摘要:在本教程中,你将了解 TypeScript 中的访问修饰符,包括 private、protected 和 public。
访问修饰符改变类的属性和方法的可见性。 TypeScript 提供了三种访问修饰符:
- private
- protected
- public
请注意,TypeScript 是在编译时(而不是运行时)控制可见性。
private 修饰符
private 修饰符把可见性限制于同一类的内部。 当你将 private 修饰符添加到属性或方法时,可以在同一类中访问该属性或方法。 任何在类的外部尝试访问私有属性或方法都将导致编译时错误。
以下示例演示如何对 Person 类的 snn、firstName 和 lastName 属性使用 private 修饰符:
class Person {
    private ssn: string;
    private firstName: string;
    private lastName: string;
    // ...
}
一旦 private 属性定义后,就可以在 Person 类的构造函数或方法中访问 ssn 属性。 例如:
class Person {
    private ssn: string;
    private firstName: string;
    private lastName: string;
    constructor(ssn: string, firstName: string, lastName: string) {
        this.ssn = ssn;
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getFullName(): string {
        return `${this.firstName} ${this.lastName}`; 
    }
}
以下代码尝试在类外部访问 ssn 属性:
let person = new Person('153-07-3130', 'John', 'Doe');
console.log(person.ssn); // compile error
public 修饰符
public 修饰符允许从所有位置访问类属性和方法。 如果没有为属性和方法指定任何访问修饰符,它们将默认采用 public 修饰符。
例如,Person 类的 getFullName() 方法具有 public 修饰符。 以下代码显式地将 public 修饰符添加到 getFullName() 方法:
class Person {
    // ...
    public getFullName(): string {
        return `${this.firstName} ${this.lastName}`; 
    }
    // ...
}
它与省略 public 关键字具有相同的效果。
protected 修饰符
protected 修饰符允许在同一个类及其子类中访问类的属性和方法。
当一个类(子类)继承于另一个类(父类)时,它是父类的子类。
如果你尝试从其他任何地方访问受保护的属性或方法,TypeScript 编译器将发出错误。
要将 protected 修饰符添加到属性或方法,可以使用 protected 关键字。 例如:
class Person {
    protected ssn: string;
    
    // other code
}
ssn 属性现在受到保护。 它将在 Person 类以及从 Person 类继承的任何类中访问。 
Person 类声明了两个私有属性和一个受保护属性。 它的构造函数将这些属性初始化为三个参数。
为了使代码更短,TypeScript 允许你声明属性并在构造函数中初始化它们,如下所示:
class Person {
    constructor(protected ssn: string, private firstName: string, private lastName: string) {
        this.ssn = ssn;
        this.firstName = firstName;
        this.lastName = lastName;
    }
    getFullName(): string {
        return `${this.firstName} ${this.lastName}`;
    }
}
当你考虑属性和方法的可见性时,最好从最不可见的访问修饰符(即 private)开始。
概括
- TypeScript 为类属性和方法提供了三种访问修饰符:private、protected和public。
- private修饰符允许在同一个类中进行访问。
- protected修饰符允许在同一类和子类内进行访问。
- public修饰符允许从任何位置访问。