注意: 如果您是 TypeScript 新手,请先查看我们的 TypeScript 入门 教程。
TypeScript 中的访问修饰符用于控制类成员(属性和方法)的可见性和可访问性,有助于强制封装。例如,
class Person {
private age: number;
public greet() {
// code
}
}
在此,`Person` 类的 `age` 变量使用 `private` 关键字隐藏,而 `greet()` 函数则使用 `public` 关键字使其可访问。
访问修饰符的类型
在 TypeScript 中,有 3 种访问修饰符
Public
Private
Protected
Public 访问修饰符
`public` 修饰符允许类成员在程序中的任何地方访问——在类内部、外部,甚至是从另一个文件中。例如,
class Person {
public name: string;
constructor(name: string) {
this.name = name;
}
public greet(): void {
console.log(`Hello, my name is ${this.name}`);
}
}
const person = new Person("Alex");
console.log(person.name);
person.greet();
输出
Alex Hello, my name is Alex
这里,
- `name` 从类外部直接访问并打印。
- `greet()` 也从外部访问并成功运行。
注意:`public` 是 TypeScript 中的默认访问级别。如果未使用任何修饰符,则成员默认被视为 `public`。
Private 访问修饰符
`private` 修饰符在 TypeScript 中限制对类成员的访问,使其只能在声明它的类内部使用。例如,
class Person {
private age: number;
constructor(age: number) {
this.age = age;
}
printAge(): void {
console.log(`Age is ${this.age}`);
}
}
const person = new Person(25);
person.printAge();
输出
Age is 25
这里,`age` 使用 `printAge()` 方法打印,因为它是在同一类内部访问的,这是允许的。
但是,如果我们尝试像这样直接从类外部访问 `age`:
console.log(person.age)
它将导致编译时错误,因为 `age` 被标记为 `private`,不能从类外部访问。
Protected 访问修饰符
`protected` 修饰符在 TypeScript 中允许类成员在类本身及其子类中访问,但在类层级结构外部无法访问。例如,
class Person {
protected gender: string;
constructor(gender: string) {
this.gender = gender;
}
}
class Student extends Person {
showGender(): void {
console.log(`Gender is ${this.gender}`);
}
}
const student = new Student("Female");
student.showGender();
输出
Gender is Female
这里,`gender` 属性被标记为 `protected`,因此不能直接从类外部访问。
但在 `Student` 子类内部却可以工作,因为 `protected` 允许在子类中访问。
总结
- `public` 成员可以在程序中的任何地方访问。
- `private` 成员仅在其定义的类内部可访问。
- `protected` 成员类似于 `private`,但可以在派生(子)类中访问。
说明符 | 同一类 | 派生类 | 类外部 |
---|---|---|---|
public |
是 | 是 | 是 |
private |
是 | 否 | 否 |
protected |
是 | 是 | 否 |
阅读更多