typescript中的interface理解

typescript中的interface理解

1.简单理解interface

interface是一种自定义的类型检测规范

可以通过定义interface来作为对象型参数的类型检测

比如定义一个User类型的检测规范

interface User{name:string,age:number,email?:string//?将email标记为可选属性
}

在使用User进行类型检测的时候

必须传入满足User的对象属性

//比如下面这个函数,返回值必须得符合User的规范
//说明返回的对象必须为{name:"",age:0}或者{name:"",age:0,email:""}这样的类型
function setUser(usename:string,age:number,email?:string):User{return { name: username, age, email}
}

输出

console.log(setUser("测试name",age:12))
//{ name: '测试name', age: 12, email: undefined }

2.interface的拓展

可以通过extends来在interface中加入其他interface的规范

interface A{nameA:string
}
interface B{nameB:string
}
interface C extends A,B{nameC:string
}

此时interface c extends a,b{ nameC:string }就相当于

interface C{nameA:string,nameB:string,nameC:string
}

使用C来进行检测时就得按照interface C 的规范

const obj:C = {nameA:"这是A",nameB:"这是B",nameC:"这是C"
}
console.log(obj)
//{ nameA: '这是A', nameB: '这是B', nameC: '这是C' }

3.接口的实现类

用类来实现interface的时候,使用关键字implements来实现

需要把interface作为类最小实现规范,也就是类至少必须要实现interface的内容

类在满足interface的情况下也可以加其他的内容

下面的IUser接口,实现类至少需要实现getName()getAge(),才满足接口的规范

interface IUser{getName():string,getAge():number
}

定义实现类AdminUser

class AdminUser implements IUser{  private name:stringprivate age:numberconstructor(adminName:string,adminAge:number){this.name=adminNamethis.age=adminAge}getName():string{//这个方法必须要有,且满足IUser的规范return this.name}getAge(): number {//这个方法必须要有,且满足IUser的规范return this.age}setName(newName:string):void{this.name = newName}
}

用类创建对象

const admin = new AdminUser("管理员A",12)
admin.setName("管理员newName")
console.log(admin.getName())
// 管理员newName

补充

1.多态:一个类可以实现多个接口,一个接口也可以拓展多个接口的规范

2.索引签名: 只规范接口中属性的类型,不规范属性的名字时候

interface testIndex {[key:string]: string; // 属性名为字符串,属性值也为字符串,但是不强制要求具体的属性名
}
const obj:testIndex={myKey:"这是我的Key"
}
console.log(obj)
// { myKey: '这是我的Key' }

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

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

相关文章

yolo数据集格式(txt)转coco格式,方便mmyolo转标签格式

近期使用mmyolo过程中发现工具自带的yolo2coco.py在转换完数据集格式后,可视化标签的时候会有标签错乱情况,具体原因也没找到,肯定是转换过程代码有问题,于是重新做一份代码直接从yolo数据集转化为coco的json格式。 代码如下&…

【数字化】华为一体四面细化架构蓝图

导读:华为的“一体四面”企业架构设计方法是一种综合性的管理框架,它通过业务架构、信息架构、应用架构和技术架构的集成设计,构建出一个既符合业务需求,又具备高度灵活性和可扩展性的IT系统。这种架构设计方法强调从业务视角出发…

TCP粘/拆包----自定义消息协议

今天是2024年12月31日,今年的最后一天,希望所有的努力在新的一年会有回报。❀ 无路可退,放弃很难,坚持很酷 TCP传输 是一种面向二进制的,流的传输。在传输过程中最大的问题是消息之间的边界不明确。而在服务端主要的…

“虚拟下单”,虚拟马丁下单,动态计算保本点位 MT4指标 限时免费!

指标名称:虚拟下单 版本:MT4 ver. 2.01(指标) 虚拟下单指标是一款便于交易者计算所有订单盈亏平衡价格的工具。通过模拟订单的方式,让交易者在实际交易前安全地测试和调整策略。 虚拟下单,计算盈亏平衡点位…

ruoyi 分页 查询超出后还有数据; Mybatis-Plus 分页 超出后还有数据

修改:MybatisPlusConfig 类中 分页合理化修改为:paginationInnerInterceptor.setOverflow(false);

消息队列类型介绍

消息队列(Message Queue,简称MQ)是一种在分布式系统中广泛应用的技术,用于在不同系统或组件之间进行异步通信。MQ通过存储和转发消息,实现了发送者和接收者之间的解耦,提高了系统的可扩展性、可靠性和灵活性…

高等数学学习笔记 ☞ 函数的极限

1. 函数的极限定义 备注:已知坐标轴上一点,则: ①:的邻域:指附近的开区间,记作。 ②:的去心邻域:指附近的开区间,但不包含,记作。 ③:的邻域&…

OpenMV与STM32通信全面指南

目录 引言 一、OpenMV和STM32简介 1.1 OpenMV简介 1.2 STM32简介 二、通信协议概述 三、硬件连接 3.1 硬件准备 3.2 引脚连接 四、软件环境搭建 4.1 OpenMV IDE安装 4.2 STM32开发环境 五、UART通信实现 5.1 OpenMV端编程 5.2 STM32端编程 六、SPI通信实现 6.1…

Xilinx DCI技术

Xilinx DCI技术 DCI技术概述Xilinx DCI技术实际使用某些Bank特殊DCI要求 DCI级联技术DCI端接方式阻抗控制驱动器(源端接)半阻抗控制阻抗驱动器(源端接)分体式DCI(戴维宁等效端接到VCCO/2)DCI和三态DCI&…

pip安装paddle失败

一、pip安装paddle失败,报错如下 Preparing metadata (setup.py) ... error error: subprocess-exited-with-error import common, dual, tight, data, prox ModuleNotFoundError: No module named common [end of output] 二、解决方法: 按照提示安装对…

报错:websocket注入为null,已解决!

错误截图 原因分析: WebSocket 在 Spring 框架中的注入问题是由其生命周期与 Spring 容器的作用域不一致引起的。spring管理的都是单例(singleton),和 websocket (多对象)相冲突。如果你的WebSocket 处理类…

基于微信小程序的校园点餐平台的设计与实现(源码+SQL+LW+部署讲解)

文章目录 摘 要1. 第1章 选题背景及研究意义1.1 选题背景1.2 研究意义1.3 论文结构安排 2. 第2章 相关开发技术2.1 前端技术2.2 后端技术2.3 数据库技术 3. 第3章 可行性及需求分析3.1 可行性分析3.2 系统需求分析 4. 第4章 系统概要设计4.1 系统功能模块设计4.2 数据库设计 5.…

回顾2024,加油2025!All, You and me!

原文链接:回顾2024,加油2025!All, You and me! 前言 今天是2024年12月31日,是2024年最后一天。 那么,你2024年你做了什么呢?有那些收获呢? 这是,每个人都会在做工作总结。也许&am…

面试场景题系列:设计视频分享系统

在本章中,你被要求设计一个像YouTube那样的系统。与这个面试问题类似的还有:设计一个类似Netflix和Hulu的视频分享平台,它们的解决方案是相同的。YouTube看起来很简单:内容创作者上传视频,观看者点击视频后播放。它真的…

WPF编程excel表格操作

WPF编程excel表格操作 摘要NPOI安装封装代码测试代码 摘要 Excel操作几种方式 使用开源库NPOI(常用,操作丰富)使用Microsoft.Office.Interop.Excel COM组件(兼容性问题)使用OpenXml(效率高)使用OleDb(过时) NPOI安装 封装代码 using System; using System.IO; u…

基于AT89C51单片机的可暂停八路抢答器设计

点击链接获取Keil源码与Project Backups仿真图: https://download.csdn.net/download/qq_64505944/90196607?spm1001.2014.3001.5503 C15 部分参考设计如下: 摘要 随着社会进步和科技发展,电子设备在各类活动中的应用日益普遍&#xff0c…

goView二开低代码平台1.0

官网文档地址:GoView 说明文档 | 低代码数据可视化开发平台 简介:GoView 是一个拖拽式低代码数据可视化开发平台,通过拖拽创建数据大屏,使用Vue3框架,Ts语言和NaiveUI组件库创建的开源项目。安装步骤和地址文档里都有…

计算机网络-L2TP VPN基础实验配置

一、概述 上次大概了解了L2TP的基本原理和使用场景,今天来模拟一个小实验,使用Ensp的网卡桥接到本地电脑试下L2TP拨号,今天主要使用标准的L2TP,其实在这个基础上可以加上IPSec进行加密,提高安全性。 网络拓扑 拓扑说明…

ListenAI 1.0.6 | 解锁订阅的文本转语音工具,支持朗读文档和网页

ListenAI是一款强大的文本转语音工具,能够将文字转换为逼真的语音,让用户随时随地倾听。它提供多种自然声音选择,适合不同内容。用户可以自定义语速和音量,获得个性化的体验。该软件无缝整合文档和网页内容,方便多任务…

torch.nn.GRU介绍

torch.nn.GRU 是 PyTorch 提供的一种循环神经网络(RNN)模块,与 LSTM 类似,但结构更简单。GRU(Gated Recurrent Unit,门控循环单元)通过较少的门控机制减少了计算复杂度,同时仍能有效解决标准 RNN 中的梯度消失问题。 GRU 的核心机制 GRU 的门控机制包括两个门:更新门…