TypeScript 接口

news/2025/3/20 22:24:39/文章来源:https://www.cnblogs.com/wt7018/p/18784106

一、特点

1、接口可以被实现,接口不能实例化,没有自己的方法

2、一个类可以实现多个接口

3、接口可以继承接口

3、同名接口可以组合

4、定义类和对象的结构

二、定义类的接口

1、接口不能实例化,没有自己的方法,属性和方法都要被类实现

2、案例

interface PersonInterface{name:stringage:numberintroduce(sex:string):string
}// 实现接口,接口不能实例化,没有自己的方法
class SinglePerson implements PersonInterface{constructor(public name:string, public age:number){}introduce(sex: string): string {return `大家好,俺叫${this.name},俺今年${this.age}岁了,俺是一个${sex}孩子`}
}const p1 = new SinglePerson('jojo', 8)
console.log(p1.age);
console.log(p1.introduce("男"));

三、接口继承接口

1、接口可以继承接口,类实现接口

2、案例

interface PersonInterface{name:string,age:number
}
// 接口继承接口
interface WorkerInterface extends PersonInterface{money:numberinfo():string
}// 类实现接口
class Wk implements WorkerInterface{constructor(public name:string, public age:number, public money:number){}info(): string {return `${this.name}今年${this.age}岁, 一个月工资${this.money}k`}
}let p = new Wk("jojo", 35, 2.8)
console.log(p.info());

四、同名接口合并

1、同名接口可以合并

2、案例

interface CarInterface{brand:stringcost:number
}
// 同名接口 合并
interface CarInterface{speedMax: numberhorsepower:numberintroduce():void
}// 类实现接口
class MiCar implements CarInterface{constructor(public brand:string, public cost:number, public speedMax:number, public horsepower:number){}introduce(): void {console.log(`${this.brand},售价${this.cost}万,最大速度超过${this.speedMax},${this.horsepower}马力`);}
}const su7U = new MiCar('su7U', 52, 320, 1500)
su7U.introduce()

五、实现多个接口

1、类可以实现多个接口

2、案例

interface AreaInterface{width:number,heigh:number
}
interface BrandInterface{brand:string,
}
// 实现多个接口
class Table implements AreaInterface, BrandInterface{constructor(public brand:string, public width:number, public heigh:number ){}introduce(){console.log(`品牌:${this.brand},面积:${this.heigh * this.width}`);}
}const t1 = new Table("源氏木语", 140, 80)
t1.introduce()

 

六、定义对象的结构

1、合并接口

interface CarInterface{brand:stringcost:number
}
// 同名接口 合并
interface CarInterface{speedMax: numberhorsepower:numberintroduce():void
}// 定义对象结构
let car:CarInterface = {brand:"小米",cost:52,speedMax:320,horsepower:1500,introduce(){console.log(`品牌:${this.brand},价格:${this.cost},最大速度:${this.speedMax},马力:${this.horsepower}`);}
}car.introduce()

2、继承接口 定义对象结构

interface PersonInterface{name:string,age:number
}
// 继承接口
interface WorkerInterface extends PersonInterface{money:number,introduce():void
}// 实现对象
const coder:WorkerInterface ={name:'小明',age:35,money:2.8,introduce(){console.log(`打工人:${this.name},已经${this.age}岁了,薪资${this.money}k`);}
}console.log(coder.name);
coder.introduce()

3、接口 定义对象结构

// 接口
interface PersonInterface{name:string,age:number,sex:string,worker?:string
}// 实现对象
let p1:PersonInterface = {name:'小美',age:18,sex:"女"
}console.log(p1.age);
console.log(p1.name);

七、接口和抽象类的区别

1、抽象类被继承,接口被实现

2、抽象类可以有自己的方法,接口不行

3、抽象类 规范类的格式,接口可以规范类和对象的格式

八、type和接口的区别

1、type 自定义类型: 基本类型、组合类型、交叉类型,不支持继承和合并

2、接口支持继承和合并,更专注对象和类的结构

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/902244.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

投资日记_道氏理论技术分析

主要用于我自己参考,我感觉我做事情的时候容易上头,忘掉很多事情。技术分析有很多方法,但是我个人相信并实践的还是以道氏理论为根本的方法。方法千千万万只有适合自己价值观,习惯,情绪,性格的方法才是好的方法。 趋势 趋势是技术分析的根本,要是连当前趋势都看不懂,最…

asp.net core webapi 完整Swagger配置

在当前项目下新建Utility文件夹,Utility文件夹下面在创建SwaggerExt文件夹,文档结果如下 CustomSwaggerExt.cs文件如下using Microsoft.Extensions.Options; using Microsoft.OpenApi.Models;namespace xxxxxxxxxx {/// <summary>/// 扩展Swagger/// </summary>pub…

ciscnccb半决赛

AWDP typo 一道2.31的堆题漏洞点位于edit功能,snprintf函数把用户输入作为format,导致了堆溢出以及格式化字符串漏洞fix 从程序的代码不难看出分配出来的堆,前面八个字节是堆的size,后面的空间才是数据域 这里原意是修改heap的size,但是用错了函数,我们修改最大读入的siz…

AI全天候智能助手,为您构建私人数据库

在数字化转型浪潮中,AI与大数据技术已成为企业提升效率、优化服务的核心引擎。思通数科凭借其自主研发的大数据智能系统,以AI为核心,打造了一站式解决方案,覆盖消费者服务、商家赋能与平台运营三大领域,助力用户与合作伙伴实现智能化升级。以下是该系统的核心功能与价值解…

安装 Prometheus监控主机服务

一、安装 Prometheus 下载 Prometheus 首先,访问 Prometheus 官网 获取最新版本的下载链接,然后使用 wget 下载:wget https://github.com/prometheus/prometheus/releases/download/v3.2.1/prometheus-3.2.1.linux-amd64.tar.gz解压并安装解压下载的文件:tar -xvzf prometh…

L1 通讲

好多,好多。L1 通讲 部分知识点速通 技术与产品开发的动机 ​ 这张图展示了两个长期趋势:技术和创新的发展速度逐渐变快; 它对我们的生活影响非常广泛,包括好的(如天花疫苗)和坏的(核弹?) 技术变得越来越强大。 例如,我们的祖先使用石制工具,但现在我们构建跨越全球…

Flink 实战之流式数据去重

流式数据是一种源源不断产生的数据,没有预定的开始与结束,至少理论上来说,它的数据输入永远不会结束。因此流式数据处理与传统的批处理技术不同,必须具备持续不断地对到达的数据进行处理的能力。因为流式数据源源不断地产生,对流式数据做去重就十分困难,因为一条数据重复…

vue3 + springboot 实现模糊查询与增加操作

实现表格查询: <!-- 表格 --><div class="card" style="margin-bottom: 5px"><el-table :data="data.tableData" stripe><el-table-column label="名称" prop="name" /><el-table-column lab…

网络基础与进阶

计算机网络入门与进阶 学习OSI网络模型相关概念(重点掌握) 学习TCP三次握手与四次挥手过程(重点掌握) 学习TCP的11种状态集转化(重点掌握) 学习DNS相关知识概念与原理 linux网关配置(添加网关 网段 以及网络主机路由) 修改网卡配置文件 用户访问www.baidu.com 整个过程…

VTK-8.2.0源码编译和初步使用(Cmake+VS2015+Qt5.14.2)

一、准备数据 1、首先确保已安装VS5015和Qt5.14.2 2、下载Cmake并安装:Download CMake 3、下载VTK-8.2.0源码和数据并解压:Download | VTK 二、Cmake构建 1、在本地磁盘创建相关文件夹2、进入源码根目录,找到CmakeList.txt,修改CmakeList.txt中的选项,使得Debug模式下生成…