Day26 :【TypeScript 学起来】Class 与 Interface 的使用

我们在前面的时候有提过 interface 是用来定义物件的型别,对物件的形状进行描述。在物件导向程序语言中,介面(Interfaces)是一个很重要的概念,它是对行为的一种抽象,而具体如何行动则需要由类别(class)去实现(implement)。

我们可以使用 implements 来检查是否有满足介面的形状。


implements

//报警器
interface Alarm {
    alert();
}

//门是一个类别
class Door {
}

//防盗门是门的子类别, 有一个报警器的功能, 新增报警方法
class SecurityDoor extends Door implements Alarm {
    alert() {
        console.log('SecurityDoor alert');
    }
}

//车的类别也有报警器的功能,新增报警方法
class Car implements Alarm {
    alert() {
        console.log('Car alert');
    }
}

const car = new Car();
car.alert();//Car alert

一个类别可以实现多个介面

可以使用,来实现多个介面:

interface Alarm2 {
    alert():void;
}

interface Light2 {
    lightOn():void;
    lightOff():void;
}

//Car 实现了 Alarm 和 Light 介面,既能报警,也能开关车灯。
class Car2 implements Alarm2, Light2 {
    alert() {
        console.log('Car alert');
    }
    lightOn() {
        console.log('Car light on');
    }
    lightOff() {
        console.log('Car light off');
    }
}


const car2 = new Car2();
car2.lightOn(); //Car light on



介面继承介面

介面与介面之间可以是继承关系:

interface Alarm3 {
    alert():void;
}

interface LightableAlarm extends Alarm3 {
    lightOn():void;
    lightOff():void;
}

class Car3 implements LightableAlarm {
    alert() {
        console.log('Car alert');
    }
    lightOn() {
        console.log('Car light on');
    }
    lightOff() {
        console.log('Car light off');
    }
}

const car3 = new Car3();
car3.alert(); //Car alert

介面继承类别

介面也可以继承class:

class Point {
    x: number;
    y: number;

    constructor(x = 0,y = 0){
        this.x = x;
        this.y = y;
    }
}

interface Point3d extends Point {
    z: number;
}

const point3d: Point3d = {x: 1, y: 2, z: 3};
console.log(point3d); //{ x: 1, y: 2, z: 3 }

感谢阅读! 明天见~


参考资料

https://willh.gitbook.io/typescript-tutorial/advanced/class-and-interfaces


<<:  Day 26 - Vue 与 HTTP请求 (1)

>>:  Day27:今天我们来聊一下IoT and OT Hacking

例行监督表单撰写实务

上一篇内部稽核讲到 5. 监督作业:进行下列监督作业,以确定本制度之有效性、及时性及确实性: (1)...

【Day 4】VSCode操作Github提取和推送

在VSCode操作Github提取 *於左方点选 【原始档控制】,点选【•••】 ,点选【提取、推送...

找LeetCode上简单的题目来撑过30天啦(DAY6)

今天尝试了前几天被我放弃的题目,过一两天後果然比较有感觉,花了一点时间还是完成了呢,心情不错 题号:...

[iT铁人赛Day6]JAVA的运算简写

既然讲到运算符号,也讲完了运算的优先顺序,那就来说说运算的简写吧 一般我们写运算时会写:"...

Stream Processing (2) - Chande Data Capture

保持同步 资料工程师修炼之路走到现在,真的没有一个系统能同足满足资料储存、查询和逻辑处理,现实世界的...