TS 中类型的继承

在 TypeScript(TS)中,类型的继承通常通过接口(Interfaces)和类(Classes)来实现。接口提供了一种定义对象形状的方式,而类则提供了一种创建对象实例的方式。以下是如何在 TypeScript 中实现类型继承的详细说明。

1. 使用接口继承接口

接口可以继承其他接口,从而组合和扩展多个接口的功能。

typescript 复制代码
interface Animal {
    name: string;
    eat(): void;
}

interface Dog extends Animal {
    breed: string;
    bark(): void;
}

const myDog: Dog = {
    name: "Buddy",
    breed: "Golden Retriever",
    eat() {
        console.log(`${this.name} is eating.`);
    },
    bark() {
        console.log(`${this.name} is barking.`);
    }
};

在这个例子中,Dog 接口继承了 Animal 接口,因此 Dog 必须实现 Animal 接口中的所有属性和方法,同时还可以添加新的属性和方法。

2. 使用类实现接口

类可以实现一个或多个接口,确保类包含接口中定义的属性和方法。

typescript 复制代码
interface Animal {
    name: string;
    eat(): void;
}

class Dog implements Animal {
    name: string;

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

    eat() {
        console.log(`${this.name} is eating.`);
    }

    bark() {
        console.log(`${this.name} is barking.`);
    }
}

const myDog = new Dog("Buddy");
myDog.eat();
myDog.bark();

在这个例子中,Dog 类实现了 Animal 接口,因此它必须包含 name 属性和 eat 方法。Dog 类还可以添加额外的属性和方法,如 bark

3. 类继承类

类可以继承其他类,从而复用和扩展父类的属性和方法。

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

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

    eat() {
        console.log(`${this.name} is eating.`);
    }
}

class Dog extends Animal {
    breed: string;

    constructor(name: string, breed: string) {
        super(name); // 调用父类的构造函数
        this.breed = breed;
    }

    bark() {
        console.log(`${this.name} is barking.`);
    }
}

const myDog = new Dog("Buddy", "Golden Retriever");
myDog.eat();
myDog.bark();

在这个例子中,Dog 类继承了 Animal 类,因此它可以使用父类 Animalname 属性和 eat 方法。Dog 类还可以添加新的属性和方法,如 breedbark

4. 混合使用接口和类

在实际开发中,你可能会混合使用接口和类来实现复杂的类型继承关系。

typescript 复制代码
interface Animal {
    name: string;
    eat(): void;
}

interface DogInterface extends Animal {
    breed: string;
    bark(): void;
}

class AnimalBase implements Animal {
    name: string;

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

    eat() {
        console.log(`${this.name} is eating.`);
    }
}

class Dog extends AnimalBase implements DogInterface {
    breed: string;

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

    bark() {
        console.log(`${this.name} is barking.`);
    }
}

const myDog = new Dog("Buddy", "Golden Retriever");
myDog.eat();
myDog.bark();

在这个例子中,DogInterface 接口扩展了 Animal 接口,AnimalBase 类实现了 Animal 接口,而 Dog 类则继承了 AnimalBase 类并实现了 DogInterface 接口。这种混合使用接口和类的方式可以提供更高的灵活性和可维护性。

通过这些示例,你可以看到 TypeScript 提供了多种方式来实现类型的继承,以满足不同的开发需求。

相关推荐
MiyueFE20 小时前
🚀🚀五个前端开发者都应该了解的TS技巧
前端·typescript
ttod_qzstudio1 天前
基于typescript严格模式以实现undo和redo功能为目标的命令模式代码参考
typescript·命令模式
张志鹏PHP全栈1 天前
TypeScript 第十天,TypeScript面向对象之Class(二)
前端·typescript
慧一居士1 天前
ESLint 完整功能介绍和完整使用示例演示
前端·javascript·typescript
enzeberg2 天前
TypeScript 工具类型(Utility Types)
typescript
難釋懷2 天前
TypeScript类
前端·typescript
杰哥焯逊2 天前
基于TS封装的高德地图JS APi2.0实用工具(包含插件类型,基础类型)...持续更新
前端·javascript·typescript
工业甲酰苯胺3 天前
TypeScript枚举类型应用:前后端状态码映射的最简方案
javascript·typescript·状态模式
土豆骑士4 天前
简单理解Typescript 装饰器
前端·typescript
ttod_qzstudio4 天前
彻底移除 HTML 元素:element.remove() 的本质与最佳实践
前端·javascript·typescript·html