📝 类的定义
class User {
// 属性声明(必须有类型)
name: string;
age: number;
private id: string;
// 构造函数
constructor(name: string, age: number) {
this.name = name;
this.age = age;
this.id = Math.random().toString(36).substr(2, 9);
}
// 方法
greet(): string {
return `Hello, I'm ${this.name}`;
}
// 带参数的方法
setAge(newAge: number): void {
this.age = newAge;
}
}
const user = new User('Alice', 30);
console.log(user.greet()); // "Hello, I'm Alice"
💡
属性声明
在 TypeScript 中,类的属性必须先声明类型,这与 JavaScript 不同。未初始化的属性需要在构造函数中赋值,或使用 ! 或 ? 标记。
🔧 属性简写
// 使用参数属性简写
class User {
// 直接在构造函数参数中声明属性
constructor(
public name: string,
public age: number,
private id: string = Math.random().toString(36).substr(2, 9)
) {}
greet(): string {
return `Hello, I'm ${this.name}, ${this.age} years old`;
}
}
const user = new User('Bob', 25);
console.log(user.greet());
📊 类的类型
// 类的类型
interface IUser {
name: string;
age: number;
greet(): string;
}
// 类实现接口
class User implements IUser {
constructor(public name: string, public age: number) {}
greet(): string {
return `Hello, ${this.name}`;
}
}
// 使用类作为类型
function printUser(user: User): void {
console.log(user.greet());
}
// 类的构造签名
type UserConstructor = new (name: string, age: number) => User;
function createUser(Ctor: UserConstructor, name: string, age: number): User {
return new Ctor(name, age);
}