在Typescript中,类是一种特殊的数据结构,用于定义对象的属性和方法。类可以被实例化为对象,这些对象可以访问类中定义的属性和方法。

  1. 定义类: 要定义一个类,可以使用class关键字,后跟类的名称和一对大括号,大括号内是类的属性和方法的定义。
class Person {
    name: string;
    age: number;

    constructor(name: string, age: number){
        this.name = name;
        this.age = age;
    }

    greet() {
        console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
    }
}

let person = new Person("Alice", 30);
person.greet(); // 输出:Hello, my name is Alice and I am 30 years old.

在上面的例子中,定义了一个名为Person的类,该类有两个属性nameage以及一个构造函数constructor用来初始化这两个属性,还有一个方法greet用于打招呼。

  1. 继承: Typescript支持类的继承,一个子类可以继承一个父类的属性和方法。
class Student extends Person {
    studentId: number;

    constructor(name: string, age: number, studentId: number) {
        super(name, age);
        this.studentId = studentId;
    }

    study() {
        console.log(`${this.name} is studying.`);
    }
}

let student = new Student("Bob", 25, 12345);
student.greet(); // 输出:Hello, my name is Bob and I am 25 years old.
student.study(); // 输出:Bob is studying.

在上面的例子中,定义了一个Student类,继承自Person类,子类通过super关键字调用父类的构造函数来初始化父类的属性。

  1. 访问修饰符: Typescript支持访问修饰符,用于控制类的成员的访问权限。常用的访问修饰符有publicprivateprotected
  • public:默认的访问修饰符,表示类的成员可以在类的内部和外部被访问。
  • private:表示类的成员只能在类的内部被访问。
  • protected:表示类的成员可以在类的内部和继承的子类中被访问。
class Car {
    public brand: string;
    private model: string;
    protected year: number;

    constructor(brand: string, model: string, year: number){
        this.brand = brand;
        this.model = model;
        this.year = year;
    }

    displayCarInfo() {
        console.log(`This is a ${this.year} ${this.brand} ${this.model}.`);
    }
}

let car = new Car("Toyota", "Camry", 2020);
console.log(car.brand); // 输出:Toyota
console.log(car.model); // 错误:Property 'model' is private and only accessible within class 'Car'.
console.log(car.year); // 错误:Property 'year' is protected and only accessible within class 'Car' and its subclasses.

在上面的例子中,brandpublic的,所以可以在外部访问;modelprivate的,只能在类的内部访问;yearprotected的,可以在类的内部和子类中访问。

  1. 静态属性和方法: Typescript支持静态属性和方法,它们属于类本身而不是类的实例。
class MathUtil {
    static PI: number = 3.14;

    static calculateCircleArea(radius: number): number {
        return this.PI * radius * radius;
    }
}

console.log(MathUtil.PI); // 输出:3.14
console.log(MathUtil.calculateCircleArea(5)); // 输出:78.5

在上面的例子中,PI是静态属性,可以直接通过类名访问;calculateCircleArea是静态方法,也可以通过类名调用。