javascript - typescript 中的接口和类有什么区别
阿神
阿神 2017-04-11 10:55:51
[JavaScript讨论组]
阿神
阿神

闭关修行中......

全部回复(4)
迷茫

接口只声明成员方法,不做实现。
类声明并实现方法。

那么接口有什么用呢?设想如下需求:
要实现一个print函数,它将传入的对象打印出来。在实际实现上,它将调用对象的getContent方法:

function print(obj): void {
    console.log(obj.getContent());
}

但是这样书写是有问题的,你知道Typescript当中是有类型检查的,必须要确保obj中存在getContent方法才能让print函数正常工作不报错。

比如:

class Article {
    public function getContent(): String {
        return 'I am an article.';
    }   
}

function print(obj: Article): void {
    console.log(obj.getContent());
}

let a = new Article();
print(a);

但是这样的话print函数不就只能打印Article类的对象了吗,如果我想要让它能够打印不止一个类的对象呢?我如何保证他们都有getContent方法?
这时候就可以用到接口,来声明一个getContent方法,这样一来,每个实现该接口的类都必须实现getContent方法:

interface ContentInterface {
    getContent(): String;
}

class Article implements ContentInterface {
    // 必须实现getContent方法
    public function getContent(): String {
        return 'I am an article.';
    }   
}

class Passage implements ContentInterface {
    // 但实现方式可以不同
    public function getContent(): String {
        return 'I am a passage.'
    }
}

class News implements ContentInterface {
    // 没有实现getContent方法,编译器会报错
}

function print(obj: ContentInterface): void {
    // 实现了ContentInterface的对象是一定有getContent方法的
    console.log(obj.getContent());
}

let a = new Article();
let p = new Passage();

print(a); // "I am an article."
print(p); // "I am a passage."

希望对你有帮助。

大家讲道理

接口不就是用于声明函数的么,然后在类中去实现这些接口里的函数

伊谢尔伦

与其他php, java 等其他语言的interface类似 只做声明 不做实现

怪我咯

ts中的interface不同于其它强类型语言的一点是,interface中还可以定义变量,这就使得interface还可以充当一些model对象的基类使用,而并非通常的用来定义一些行为。官网上也说它在ts中的意义不同往常,所以不建议用大写的I来开头作为接口名。以上个人愚见,若说错还望指正。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号