接口与类
类与访问修饰符
学习 public/private/protected、readonly、抽象类
类与访问修饰符
TypeScript 为 ES6 类添加了类型注解和访问控制。
学完本章你将: 掌握 public/private/protected、readonly、抽象类。
类基础
typescript
class Person {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet(): string {
return `Hello, I'm ${this.name}`;
}
}
const alice = new Person("Alice", 25);
console.log(alice.greet());
访问修饰符
typescript
class BankAccount {
public readonly id: string; // 公开 + 只读
private balance: number; // 仅此类可访问
protected owner: string; // 此类 + 子类可访问
constructor(id: string, owner: string, balance: number) {
this.id = id;
this.owner = owner;
this.balance = balance;
}
public deposit(amount: number): void {
this.balance += amount;
}
private logTransaction(type: string): void {
console.log(`${type}: ${this.balance}`);
}
}
const account = new BankAccount("001", "Alice", 1000);
account.deposit(500);
// account.balance; // ❌ 私有属性
// account.owner; // ❌ 受保护属性
参数属性(简写)
typescript
// 构造函数参数前加修饰符,自动声明并赋值
class User {
constructor(
public name: string,
private email: string,
protected role: string = "user",
) {}
}
const user = new User("Alice", "a@test.com");
console.log(user.name); // "Alice" ✅
// user.email; // ❌
抽象类
typescript
abstract class Animal {
abstract makeSound(): string; // 子类必须实现
move(): string {
return "Moving...";
}
}
class Dog extends Animal {
makeSound(): string {
return "汪汪!";
}
}
class Cat extends Animal {
makeSound(): string {
return "喵喵!";
}
}
// const animal = new Animal(); // ❌ 不能实例化抽象类
const dog: Animal = new Dog(); // ✅ 可以用抽象类型
console.log(dog.makeSound()); // "汪汪!"