TypeScript 中 extends 关键字

基础概念与语法介绍

extends关键字主要用于类、接口和泛型中,分别实现继承扩展约束功能。在类中,它允许一个类继承另一个类的属性和方法;在接口定义中,他用于合并接口,形成一个包含所有指定接口成员的新接口;而在泛型中,extends用于限制类型变量必须符合某种类型结构,增加了泛型的灵活性和类型的安全性。

类的继承

类的继承是面向对象编程的基本特征之一,extends在此发挥了核心作用。通过继承、子类可以复用父类的属性和方法,同时可选择性的覆盖或扩展他们

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

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

  speak(){
    console.log(`${this.name} is Animal`)
  }
}

class Dog extends Animal {
  speak(){
    console.log(`${this.name} Dog`)
  }
}

在这个例子中,Dog类通过extends继承了Animal类,并覆盖了speak方法以提供更具体的实现。

接口的扩展

接口扩展是TypeScript中实现接口复用组合的强大机制。利用extends,可以创建一个接口,它包含一个或多个其他接口所有成员。

基本接口扩展

假设你有两个基本接口,一个描述了动物的一般特征,另一个专门描述了鸟类的特征。

typescript 复制代码
interface Animal {
    name: string;
    age: number;
}

interface Brid extends Animal {
    fly(): void;
    sing(): string;
}

let brid: Brid = {
    name: 'zyj',
    age: 1,
    fly() {
        console.log('fly');
    },
    sing() {
        return 'sing'
    }
}

在这里,Bird接口通过extends关键字扩展了Animal接口,这就意味着一个实现了Brid接口的对象除了需要有flysing方法还必须有nameage属性。

多接口扩展

有时候一个类或接口可能需要符合多个接口的规范。TypeScript支持多重继承,即一个接口可以扩展多个其他接口。

typescript 复制代码
interface Swinmer {
    swim(): void;
}

interface Flyer {
    fly(): void;
}

interface Duck extends Swinmer, Flyer {
    quack(): void;
}

let duck: Duck = {
    swim() {
        console.log('swim')
    },
    fly() {
        console.log('fly')
    },
    quack() {
        console.log('quack')
    },
}

在上面的例子中,Duck接口通过扩展SwimmerFlyer接口,要求实现了Duck的类型还需要有swimfly方法,以及自己的quack方法。

泛型接口与扩展

接口扩展也可以与泛型一起使用,为泛型类型增加更多约束或行为。

typescript 复制代码
interface Loggable<T> {
    log(message: T): void;
}

interface Identifiable<T> {
    id: T;
}

interface User extends Identifiable<number>, Loggable<string> {
    name: string;
    email: string;
}

const user: User = {
    id: 1,
    name: 'zyj',
    email: '123@qq.com',
    log(message: string) {
        console.log(message)
    }
}

在这个例子中,User接口不仅有自己的属性nameemail,还通过扩展Identifiable<number>获得了id属性,并且通过扩展Loggable<string>要求有一个接受字符串参数的log方法。

我是菜逼,大佬勿喷!

相关推荐
TunerT_TQ3 小时前
GitHub深度工程评测:Cline 源码级工程评测|65k Star 开源AI编程助手的工程全景
typescript·开源·github·vs code·ai编程助手·开源供应链安全·静态源码审计
贩卖黄昏的熊21 小时前
NestJS简明教程——安全
开发语言·javascript·安全·typescript·nest.js
theoweb321 小时前
Typescript关于sort需要注意的地方
typescript
黄泉路醉s1 天前
在Vant+Vue+TypeScript的H移动前端使用UnoCSS
前端·vue.js·typescript
不好听6131 天前
TypeScript 类型系统:`type` vs `interface` 与 `import type`
typescript
晓说前端2 天前
TypeScript 高级特性 —— 类型断言与泛型
前端·typescript
烬羽2 天前
React 状态提升:一个 ColorPicker,彻底搞懂状态该放哪里
react.js·typescript·设计
ji_shuke3 天前
Playwright 从零到 CI 实战:基于 TypeScript 的端到端测试完整指南
javascript·ci/cd·typescript·playwright
小林ixn3 天前
React + TypeScript 实战:从“类型体操”到“数据持久化”,一次讲透组件通信与副作用管理
前端·react.js·typescript
用户0934077735143 天前
HarmonyOS WPS Open SDK 快速入门:HAR 装上就能打开文档吗
typescript·harmonyos