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 提供了多种方式来实现类型的继承,以满足不同的开发需求。

相关推荐
不会敲代码14 小时前
从零开始用 TypeScript + React 打造类型安全的 Todo 应用
前端·react.js·typescript
赵小胖胖21 小时前
解决方案与原理解析:TypeScript 中 Object.keys() 返回 string[] 导致的索引类型丢失与优雅推导方案
typescript
minge2 天前
借助 Trae Builder 把 TypeScript 的碎片化学习记录整理成文档
typescript
骑着小黑马2 天前
从 Electron 到 Tauri 2:我用 3.5MB 做了个音乐播放器
前端·vue.js·typescript
ZengLiangYi3 天前
并发 401 下的 Token 刷新竞态:一个被低估的 Bug
typescript
袋鱼不重3 天前
Typescript 核心概念
前端·typescript
刮涂层_赢大奖3 天前
我把 AI 编程 Agent 变成了宝可梦,让它们在像素风办公室里跑来跑去
前端·typescript·claude
时光不负努力4 天前
编程常用模式集合
前端·javascript·typescript
时光不负努力4 天前
ts+vue3开发规范
vue.js·typescript
时光不负努力4 天前
typescript常用的dom 元素类型
前端·typescript