TypeScript 类

1. 基本用法

在 TypeScript 中,可以使用 class 关键字来定义类,然后通过 new 关键字来创建类的实例。例如:

typescript 复制代码
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'm ${this.age} years old.`);
    }
}

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

2. 继承与多态

在 TypeScript 中,类支持继承,子类可以继承父类的属性和方法,并且可以重写父类的方法实现多态。例如:

typescript 复制代码
class Animal {
    name: string;

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

    makeSound() {
        console.log("Animal makes a sound.");
    }
}

class Dog extends Animal {
    makeSound() {
        console.log("Dog barks.");
    }
}

let dog = new Dog("Buddy");
dog.makeSound(); // 输出:Dog barks.

3. 访问修饰符

TypeScript 提供了访问修饰符(Access Modifiers),用于控制类的成员的可访问性。包括 publicprivateprotected。例如:

typescript 复制代码
class Car {
    private speed: number;

    constructor(speed: number) {
        this.speed = speed;
    }

    accelerate() {
        this.speed += 10;
    }

    getSpeed() {
        return this.speed;
    }
}

let car = new Car(50);
// console.log(car.speed); // Error: 'speed' is private and can only be accessed within class 'Car'
console.log(car.getSpeed()); // 输出:50
car.accelerate();
console.log(car.getSpeed()); // 输出:60

4. 抽象类

抽象类(Abstract Class)是不能直接实例化的类,它只能被继承,用于提供其他类的通用功能。抽象类可以包含抽象方法,子类必须实现这些抽象方法。例如:

typescript 复制代码
abstract class Shape {
    abstract area(): number;
}

class Circle extends Shape {
    radius: number;

    constructor(radius: number) {
        super();
        this.radius = radius;
    }

    area(): number {
        return Math.PI * this.radius * this.radius;
    }
}

let circle = new Circle(5);
console.log(circle.area()); // 输出:78.53981633974483

5. 类与接口

类与接口是 TypeScript 中两个重要的概念,可以结合使用,实现更灵活的代码结构。例如:

typescript 复制代码
interface Printable {
    print(): void;
}

class Document implements Printable {
    print() {
        console.log("Document is being printed.");
    }
}
相关推荐
木易 士心1 小时前
ESLint 全指南:从原理到实践,构建高质量的 JavaScript/TypeScript 代码
javascript·ubuntu·typescript
前端达人1 小时前
都2026年了,还在用Options API?Vue组合式API才是你该掌握的“正确姿势“
前端·javascript·vue.js·前端框架·ecmascript
chao-Cyril2 小时前
从入门到进阶:前端开发的成长之路与实战感悟
前端·javascript·vue.js
前端达人3 小时前
被JavaScript忽视的Web Animations API:为什么说它是前端动画的真正未来?
开发语言·前端·javascript·ecmascript
2301_796512524 小时前
【精通篇】打造React Native鸿蒙跨平台开发高级复合组件库开发系列:Swipe 轮播(用于循环播放一组图片或内容)
javascript·react native·react.js·ecmascript·harmonyos
念念不忘 必有回响5 小时前
前端判断文本是否溢出:单行与多行场景的完整解析
前端·javascript·css·vue.js
css趣多多5 小时前
vue3的组件间通信ref子组件需要把父组件要的ref数据开放
前端·javascript·vue.js
我是伪码农5 小时前
Vue 2.10
前端·javascript·vue.js
AAA阿giao5 小时前
React 性能优化双子星:深入、全面解析 useMemo 与 useCallback
前端·javascript·react.js
成震19715 小时前
UBUNTU 安装虚拟机
linux·运维·ubuntu