当前位置: 首页 > news >正文

TypeScript:11、接口

接口

接口用于描述对象或类应该具备的结构。它只规定属性和方法的形状,不负责创建实例,也不提供具体实现。

一、接口的基本语法

interfacePerson{name:string;sayHello():void;}

这个接口要求对象必须包含:

  • name字符串属性。
  • sayHello方法。

二、使用接口检查对象

接口可以作为函数参数类型:

interfacePerson{name:string;sayHello():void;}functiongreet(person:Person):void{person.sayHello();}greet({name:'孙悟空',sayHello():void{console.log('Hello,我是'+this.name);}});

传入的对象只要满足接口结构,就可以作为Person使用。

三、接口的结构化类型检查

TypeScript 关注对象是否具有需要的属性和方法,而不要求对象必须来自某一个具体的类。这种方式叫结构化类型系统。

interfaceUser{name:string;age:number;}constuser={name:'孙悟空',age:18,address:'花果山'};functionprintUser(value:User):void{console.log(value.name+':'+value.age);}printUser(user);

user包含User要求的属性,因此可以传给printUser

四、类实现接口

使用implements让类实现接口:

interfacePerson{name:string;sayHello():void;}classStudentimplementsPerson{constructor(publicname:string){}sayHello():void{console.log('大家好,我是'+this.name);}}conststudent=newStudent('小明');student.sayHello();

类实现接口时,必须包含接口中声明的所有属性和方法。

五、接口中的可选属性

使用?可以声明可选属性:

interfaceConfig{host:string;port?:number;}constconfigA:Config={host:'localhost'};constconfigB:Config={host:'localhost',port:3000};

可选属性可能不存在,使用时要考虑undefined

functionprintConfig(config:Config):void{if(config.port!==undefined){console.log(config.port);}}

六、接口中的 readonly 属性

使用readonly可以让接口属性只能读取:

interfaceUser{readonlyid:number;name:string;}constuser:User={id:1001,name:'孙悟空'};// 编译错误:id 是只读属性// user.id = 1002;

七、接口继承接口

接口可以通过extends继承其他接口:

interfaceAnimal{name:string;}interfaceDogextendsAnimal{bark():void;}constdog:Dog={name:'旺财',bark():void{console.log('汪汪叫');}};

Dog同时拥有Animal的属性和自己的方法。

八、接口和类型别名的区别

接口和类型别名都可以描述对象结构,但使用习惯略有不同:

对比项interfacetype
描述对象结构适合适合
声明类的实现契约常用也可以使用
扩展方式extends交叉类型&
联合类型不直接使用更方便
元组和字面量可以间接描述更方便

示例:

typeID=number|string;typePoint=[number,number];

九、接口和抽象类的区别

对比项接口抽象类
是否可以包含具体实现不包含可以包含
是否可以有构造函数不可以可以
是否可以保存实现逻辑不可以可以
一个类可以实现多个可以实现多个接口通常只能继承一个类
主要作用描述结构和契约提供基础类和通用逻辑

十、常见问题

1. implements 不会自动生成方法

implements只负责检查类是否满足接口,不会自动把方法添加到类中:

interfacePerson{sayHello():void;}classStudentimplementsPerson{// 必须自己实现 sayHellosayHello():void{console.log('Hello');}}

2. 接口不能直接创建对象

接口只存在于类型检查阶段,不能这样使用:

// const person = new Person();

应该创建实现接口的具体类,或者创建符合接口结构的对象字面量。

十一、本章小结

  • 接口用于描述对象或类的结构。
  • 对象只要满足接口要求,就可以通过类型检查。
  • implements用于让类实现接口。
  • 接口支持可选属性、只读属性和接口继承。
  • 接口描述结构,抽象类可以提供公共实现。
http://www.jsqmd.com/news/1397521/

相关文章:

  • SpringBoot与MyBatis-Plus整合实战:从零构建高效数据层开发
  • 魔兽争霸3闪退卡顿怎么解决?WarcraftHelper兼容性修复完整指南
  • 第5章 ArkUI(下)
  • 还在三款软件间来回切?这款Switch游戏文件传输工具把装游戏压到五分钟
  • Linux进程间通信(IPC)详解:信号、管道、共享内存与信号量
  • 2026苏州钻戒出手参考:理清钻石回收估价逻辑,避开四大常见套路 - 好物循环记
  • 乌鲁木齐汽车贴膜推荐哪家?贴车衣、车窗膜哪家好?追光靠谱吗,施工技术和口碑都好的门店推荐 - zhouzhou12321
  • 2026 年南昌微挖拆除|砸墙|微挖机租赁去哪里找? - LYL仔仔
  • 从零搭建私有GitLab:安装配置、权限管理与CI/CD实战指南
  • Burp Suite、Fiddler与Charles抓包工具横向对比:从原理到实战选型指南
  • 【IEEE出版 | 会后快至3-4个月检索】2026年低空技术与智能系统国际学术会议(LATIS 2026)
  • MySQL实现UPSERT操作:从INSERT ON DUPLICATE KEY UPDATE到临时表方案详解
  • 空洞骑士模组管理器 Lumafly 使用指南:跨平台装模组,一篇看懂怎么用
  • Sunshine游戏串流上手记:把客厅电视变成第二块游戏屏幕
  • OpenClaw安全加固指南:从基础配置到高级防护
  • 2026深圳光明区同城搬家行业科普指南 - 深圳家顺兴搬家
  • 华为迈普设备SSH登录失败排查指南:从原理到实战解决运维难题
  • 2026年南洋电缆供应商选择:国标全系列线缆哪家有优势 选型指南 - 全域品牌推荐
  • 卖包被临时压价?聊聊奢侈品回收那些隐形套路 - 朝夕热点速报
  • LaTeX表格加粗排版难题:从原理到实战的完整解决方案
  • SMB协议全解析:从原理到实战,构建高速局域网文件共享
  • 2026工业炉制造厂家实力甄选:聚焦节能耐高温精密型源头工厂 - 卓企推荐
  • 深入解析互斥锁与信号量:从竞态条件到生产者-消费者模型
  • 2026年茂名建筑设计专业推荐,哪个更受青睐? - 官方资讯
  • NCM文件解密完整指南:用ncmdump快速解锁网易云音乐格式
  • 网页媒体资源捕获终极手册:猫抓扩展四步上手,网页视频下载不再求人
  • 乐清虹桥镇口碑推荐|贝盈幼儿园安全守护与膳食管理体系合规评估报告 - 起跑123
  • 企业AI落地首选销售场景:技术栈、ROI与实施路径全解析
  • 超越单一指标:构建AI竞争力的多维度评估框架与工程实践
  • 2026 年南昌人工拆除|微挖拆除|废品拆除回收服务怎么选? - LYL仔仔