微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

【Typescript】类与接口的关系8

目录

类与接口的关系

今天我们介绍一下接口与类的关系。我们通过一个图来说明。

从这个图中我们可以看接口与类的关系,首先接口之间是可以相互继承的,这样能实现接口的复用。
类也可以相互继承,可以实现方法与类的复用。
接口是可以通过类来实现的,但是接口只能约束类的公有成员。另外,接口也可以抽离类的成员,抽离的时候会包括公有成员,私有成员,和受保护的成员。

interface Human {
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    name: string
    eat() {}
}

接口的特征

接口只能约束类的公有成员

interface Human {
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    private name: string // 这里这样写,这个类会报错, Property 'name' is private in type 'Asia' but not in type 'Human'.
    eat() {}
}

接口不能约束类的构造函数

interface Human {
    // new (name: string): void // 这里会提示实现了错误的类的接口,  Type 'Asia' provides no match for the signature 'new (name: string): void'.
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    name: string // 这里这样写,这个类会报错, Property 'name' is private in type 'Asia' but not in type 'Human'.
    eat() {}
}

接口的继承

接口可以像类一样继承,并且一个接口可以继承多个接口。

interface Human {
    name: string,
    eat(): void
}

class Asia implements Human {
    constructor(name: string) {
        this.name = name;
    }
    name: string 
    eat() {}
}

interface Man extends Human {
    run(): void
}

interface Child {
    cry(): void
}

interface Boy extends Man, Child {}

let boy: Boy = {
    name: '',
    run() {},
    cry() {},
    eat() {}
}

接口还可以继承类

class Auto {
    state = 1
}

interface AutoInterface extends Auto {

}

class C implements AutoInterface {
    state = 1
}

class Bus extends Auto implements AutoInterface {

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐