自学内容网 自学内容网

第四章 TypeScript 接口的深入探索

在 TypeScript 中,接口是一个非常重要的概念,它在面向对象编程中发挥着关键作用。

一、概述

接口通常作为一种契约或规范,让类去遵守,确保类实现某些特定的行为或功能。这有助于提高代码的可维护性和可扩展性,使得不同的组件可以更好地协同工作。

二、语法说明

1. 接口定义

使用 interface 关键字定义接口。通常情况下,接口中只会包含属性和方法的声明,而不包含具体的实现细节,具体的实现由实现类来完成。例如:

interface PersonInt {
    id: number;
    name: string;
    age: number;

    introduce(): void;
}

2. 接口实现

接口的实现需要用到 implements 关键字。在实现类中,需要包含接口属性的赋值逻辑,以及接口方法的实现逻辑。例如:

class StudentClass implements PersonInt {
    id: number;
    name: string;
    age: number;

    constructor(id: number, name: string, age: number) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    introduce(): void {
        console.log("我是一名学生");
    }
}

三、多态

多态是面向对象程序设计中的一个关键概念,它允许不同类的对象对同一消息做出不同的响应。

1. 具体案例

首先创建一个 PersonInterface 接口的实现类 TeacherClass

class TeacherCalss implements PersonInt {
    id: number;
    name: string;
    age: number;

    constructor(id: number, name: string, age: number) {
        this.id = id;
        this.name = name;
        this.age = age;
    }
    introduce(): void {
        console.log("我是一名老师");
    }
}

然后创建一个学生对象和老师对象,注意两个对象的类型均可以设置为 PersonInt

let a1: PersonInt = new StudentClass(1, 'aa', 23);
let a2: PersonInt = new TeacherCalss(2, 'bb', 21);

最后分别调用 a1 和 a2 的 introduce() 方法,就会发现,同样是 PersonInt 类型的两个对象,调用同一个 introduce() 方法时,表现出了不同的行为,这就是多态。

a1.introduce(); // 我是一名学生
a2.introduce(); // 我是一名老师

四、接口的作用

在传统的面向对象编程场景中,接口主要用于设计和组织代码,使代码更加容易扩展和维护。

1. 订单支付系统示例

假如现在需要实现一个订单支付系统。按照面向对象的习惯,先定义一个订单类 Order

// 初始的订单类
class Order {
    totalAmount: number;

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

    pay() {
        console.log("支付金额:" + this.totalAmount);
    }
}

如果这个支付系统需要支持其他支付方式,我们可以定义一个支付的接口,接口中声明一个 pay 方法,用来规范实现类必须实现支付逻辑。

interface PaymentInterface {
    pay(money: number): void;
}

然后在订单类中增加一个 PaymentInterface 的属性,并在订单类中的 pay 方法中调用 paymentInterface 的 pay 方法。

class Order {
    totalAmount: number;
    paymentInterface: PaymentInterface;

    constructor(totalAmount: number, paymentInterface: PaymentInterface) {
        this.totalAmount = totalAmount;
        this.paymentInterface = paymentInterface;
    }

    pay() {
        console.log("支付金额:" + this.totalAmount);
        this.paymentInterface.pay(this.totalAmount);
    }
}

这样改造之后,就可以很容易地在不改变现有代码的情况下,支持新的支付方式。比如现在需要支持支付宝支付,就可以创建一个 AliPay 类并实现 PaymentInterface 接口。

class AliPay implements PaymentInterface {
    pay(money: number): void {
        console.log("支付宝:" + money);
    }
}

五、TypeScript 中接口的特殊性

TypeScript 中的接口是一个非常灵活的概念。除了用作类的规范之外,也常用于直接描述对象的类型。

1. 描述一般对象类型

例如现在有一个变量的定义:

let stu: { name: string, age: number, gender: string } = { name: 'aa', age: 11, gender: '男' };

可以看到变量的值作为一个一般对象,变量的类型为 {name:string,age:number,gender:string}。此时就可以声明一个接口来描述该对象的类型。

interface Stu {
    name: string;
    age: number;
    gender: string;
}

let stu1: Stu = { name: 'bb', age: 21, gender: '男' };

总结:TypeScript 中的接口为开发者提供了一种强大的工具,用于规范类的行为、实现多态以及描述对象类型。通过合理使用接口,可以使代码更加清晰、可维护和可扩展,提高开发效率和代码质量。


原文地址:https://blog.csdn.net/zhiqiuqiu2/article/details/143597210

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!