TypeScript - 类与接口

599 阅读1分钟

相比于类接口的概念要更为抽象一点,我们继续以手机的例子作比。手机作为一个类型,这个类型的实例都是能够打电话、发短信的。因为手机这个类的特征就是打电话、发短信。但是能够打电话不仅仅是手机,以前还有比较常见的座机。但是座机并不属于手机这个类目,而是一个单独的类目,因为它不能够发短信。在这种情况下就会出现不同的类与类之间也会有一些共同的特征,对于这些公共的特征一般会使用接口去抽象。可以理解为手机可以打电话因为它实现了能够打电话的协议,而座机也能够打电话因为它也实现了这个相同的协议。这里所说的协议在程序当中称为接口,使用接口约束类之间公共的能力。

interface EatAndRun {
    eat (foot:string): void;
    run (distance:number): void;
}
class Person implements EatAndRun {
    eat (food:string):void {
        console.log(`优雅的进餐:${food}`)
    }
    run (distance: number):void {
        console.log(`直立行走:${distance}`)
    }
}
class Animal implements EatAndRun {
    eat (food:string):void {
        console.log(`呼噜呼噜的吃:${food}`)
    }
    run (distance: number):void {
        console.log(`爬行:${distance}`)
    }
}

这里需要注意一点的就是,在 C# 和 Java 这样的语言当中,建议我们尽可能的让每个接口的定义更加简单、更加细化。更为合理的设计就是一个接口只去约束一个能力,让后让一个类型同时去实现多个接口。

interface Eat {
    eat (foot:string):void 
}
interface Run {
    run (destance: number):void
}
class Person implaments Eat, Run {}
class Animal implaments Eat, Run {}