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

相关推荐
用户0934077735143 小时前
HarmonyOS WPS Open SDK 实践:用能力分层重构 OpenFileRequest
typescript·harmonyos
gis开发之家21 小时前
vue3直击架构痛点 依赖倒置与接口隔离——打造坚如磐石的插件与高阶组件(HOC)模式
javascript·架构·typescript·前端框架·vue3
冬枳1 天前
基于OpenSeagragon封装的前端病理切片展示组件
前端·typescript
退休倒计时1 天前
【每日一题】LeetCode 287. 寻找重复数 TypeScript
算法·leetcode·typescript
@@@@@@@@542 天前
JavaScript 的缺点与 TypeScript 的弥补
开发语言·javascript·typescript
用户0934077735142 天前
HarmonyOS WPS Open SDK 实践:最小打开闭环与 enableEdit 分支处理
typescript·harmonyos
柯克七七3 天前
我把 bug 修得太干净了,测试组以为这个模块本来就没问题
前端·javascript·typescript
退休倒计时3 天前
【每日一题】LeetCode 39. 组合总和 TypeScript
算法·leetcode·typescript
yyt3630458413 天前
KlineChartQuant Tooltip 高频交互 200FPS 性能优化完整复盘
前端·经验分享·性能优化·typescript·vue·交互·chrome devtools
用户0934077735143 天前
HarmonyOS WPS Open SDK 实践:办公审批附件「打开—编辑—回传」代码实现
typescript·harmonyos