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

【TypeScript】TS接口interface类型(三)

【TypeScript】TS接口interface类型(三)



在这里插入图片描述

    • 【TypeScript】TS接口interface类型(三)
        • 一、接口类型
        • 二、实践使用
          • 2.1 常规类型
          • 2.2 设置属性只读 readonly
          • 2.3 设置索引签名
          • 2.4 设置可选属性
          • 2.5 函数类型接口

一、接口类型

TypeScript中的接口是一种定义对象类型的方式。接口定义了一个对象应该具有哪些属性和方法,但并不实现它们。

我们经常说的接口比如后端写了一个接口给前端调用,接口包括地址、参数、请求方式等等,参数规定了传参的类型。

TypeScript接口也是一种类型,和number、string、undefined等一样,约束使用者使用,主要是用来进一步定义对象中属性的类型。它是对行为模块的抽象,具体的行为是用类来实现。

二、实践使用


通过interface来声明类的类型,使用时需要注意以下几点:

  • interface声明的类的首字母大写,这是tslint规范,当然不使用时tslint规范,写成小写是不会报错,建议大写
  • 在声明变量时,变量的形状必须跟接口的形状保持一致,即变量的属性值的类型必须和声明的类的属性的类型保持一致,否则会报错,少写、多写都会报错。
  • 可对属性设置联合类型
  • 接口中声明的属性类型以分号隔开
2.1 常规类型

也就是类类型接口,用于定义对象的结构,例如:

interface Class {name: string;time: number;
}
let info: Class = {name: 'typescript',time: 2
}

联合类型:顾名思义,也就是一个属性由几个类型联合起来,如下面time属性,既可以是数字类型也可以时字符串类型。

interface Class {name: string;time: numberstring;
}
let info: Class = {name: 'typescript',time: 2
}

对于接口interface规定的类型,不能够出现多余的属性,也不能缺少部分属性,同时也不能与声明的类的属性的类型不一致

  • 多写属性

    interface Class {name: string;time: numberstring;
    }
    let info: Class = {name: 'typescript',time: 2,age: 18
    }

    在这里插入图片描述

  • 缺少部分属性

    interface Class {name: string;time: number | string;
    }let info: Class = {name: 'typescript',
    }
    

    请添加图片描述

  • 与声明的类的属性的类型不一致

    interface Class {name: string;time: number | string;
    }
    let info: Class = {name: 'typescript',time:{},
    }
    

    请添加图片描述

另外除了以上基础用法外,还可以设置接口属性只读索引签名可选属性函数类型接口,具体如下:

2.2 设置属性只读 readonly

在接口中属性前加readonly,表示该属性为只读,如果修改该属性的值话就会报错

interface Class {readonly name: string;time: number;
}
let info: Class = {name: 'typescript',time: 2
}
info.name = 'zhangsan';
// Argument of type 'string' is not assignable to parameter of type 'number'.

在这里插入图片描述

2.3 设置索引签名

用于定义数组或对象的索引类型,设置索引签名后,在对象数据中传入多余的属性,仍能够执行。具体使用是在接口中定义一个 [property:string]:any,意思是定义了一个属性,属性的类型是字符串,属性值类型为任意。

interface Class {readonly name: string;time: number;[property:string]:any
}
let info: Class = {name: 'typescript',time: 2,age:19,sex:'男'
}

因为设置了索引签名,故而此时并不会报错。

当property设置为number时,则该属性就变成了类数组,具体如下所示:

interface Class {[property:number]:any
}
let info: Class = ['one','two'];
//可以通过索引进行访问值,但是不能使用数组的方法,毕竟不是真正的数组
console.log(info[0])//one
2.4 设置可选属性

设置可选只需要在接口中属性后加 ? ,则表示该属性要不要都无所谓

  • 可选属性没有赋值的时候,则获取到为 undefined
  • 可选方法需要先判断,再调用
       	interface Class {readonly name: string;time: number;age?: number;func?(): void;}let info: Class = {name: 'typescript',time: 2,age: 19,}
    
2.5 函数类型接口

用于定义函数的参数和返回值类型,我们也可以用接口来定义函数的参数和返回值。
例如:

interface Class {(numA:number,numB:number):number
}
let info: Class = (numA,numB)=>numA+numB
info(1,2)
info(1,'2')//Error

在这里插入图片描述




以上就是TypeScript接口类型介绍,希望喜欢的同学点赞加收藏,谢谢。





相关文章:

【TypeScript】TS接口interface类型(三)

【TypeScript】TS接口interface类型(三) 【TypeScript】TS接口interface类型(三)一、接口类型二、实践使用2.1 常规类型2.2 设置属性只读 readonly2.3 设置索引签名2.4 设置可选属性2.5 函数类型接口 一、接口类型 TypeScript中的…...

Python web实战之Django 的 RESTful API 设计详解

关键词: Python, Web 开发, Django, RESTful API 1 API的一些事儿 1.1 什么是API? API是应用程序编程接口(Application Programming Interface)的缩写。它是一种定义了不同软件组件之间交互方式的规范。API允许不同的应用程序之间进行通信和…...

Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)

Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数) 目录 Python 程序设计入门(014)—— Python 的 Lambda 函数(匿名函数)一、匿名函数的定义二、匿名函数的特征三、匿…...

【MySQL系列】表约束的学习

「前言」文章内容大致是MySQL的表的约束。 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 目录 一、MySQL表的约束1.1 空属性1.2 默认值(default)1.3 列描述(comment)1.4 zerofill1.5 主键(primary ke…...

低功耗LoRaWAN国产低功耗LoRa+RF射频前端芯片XD6500S

目录 典型应用XD6500S简介芯片特性 LoRa系列选型参考 LoRa是为低数据速率、远距离距离和超低功耗而优化的扩频协议,用于LPWAN应用程序的通信。 典型应用 一、智慧农业   智慧农业大田解决方案利用传感设备、自动化控制设备、气象站实时监测采集田间土壤墒情、气象…...

【基础IO】文件系统 {磁盘的物理结构,存储结构,逻辑结构;CHS 和 LBA 寻址方式;磁盘分区和块组;文件inode;软硬链接}

文件系统 文件分为: 内存文件:被进程打开的文件,文件被加载到内存中供进程快速读写。磁盘文件:没有被打开的文件,保存在磁盘上。磁盘文件被分门别类的存储和管理,用于支持更好的存取。 提示: …...

全角字符和半角字符

全角字符的由来 全角符号是双字节中文编码的历史遗留问题。当年在纯文本的界面中,为了让西文和中日韩的方块字对齐,就让西文字母、数字和标点也占用一个汉字的视觉空间,并使用 2 个字节存储。后来,其中的一些全角字符因为比较有用…...

【java】【经验】java: 错误: 不支持发行版本 6

前言:配置过maven之后,发现原来的一些项目运行提示java: 错误: 不支持发行版本 6或者java: 错误: 不支持发行版本 5,主要原因:是因为项目使用的Java版本和安装的Java版本不符合 目录 1 设置项目java版本 2 设置模块版本 3 set…...

Spring Boot3.0(四):Thymeleaf 使用详解

Thymeleaf 介绍 简单说,Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,它可以完全替代 JSP 。相较与其他的模板引擎,它有如下三个极吸引人的特点: 1.Thymeleaf 在有网络和无网络的环境下皆可运行,即它可以…...

杨辉三角【Java二维数组】

这个代码中,我们定义了一个二维数组nums来存储杨辉三角的每一个数字。在for循环中,我们初始化每一行的第一个和最后一个数字,并且根据上一行的数字来计算出中间的数字。 接着,我们使用两个嵌套的for循环来输出杨辉三角。第一个循…...

解决SpringBoot服务返回数据存在$ref $.data等相关问题

1、场景 ​ 在日常的开发中,我们数据接口返回数据使用了FastJson序列化数据,当返回一个数据list时候出现" r e f " " ref" " ref"".data" 等类似乱码一样的数据,当时我比较匪夷所思,我写…...

【iOS安全】开启任意app的WebView远程调试

参考:https://mp.weixin.qq.com/s/bNKxQaVrPaXsZ5BPbsXy7w (来自周智老师的公众号) 概述 Safari 有一个内置的前端调试器, 在iPhone通过局域网或者USB连接MacBook 并启用Safari 远程调试之后,前端调试器默认情况下对…...

windows下 java程序无窗口启动、无窗口启动java -jar

创建一个.bat文件,其他照抄,注意一下你自己的jar包路径和日志路径:例:java -jar C:\data\operation-1.0-SNAPSHOT.jar > C:\data\log.log 2>&1 & ------------文件内容 echo off %1 mshta vbscript:CreateObject(…...

锦程消费金融业务生变:App下架,部分自营信贷暂停

来源 | 镭射财经(leishecaijing) 被誉为消金房抵一哥的锦程消费金融,调整旗下自营信贷业务,展业回归房抵场景。 「镭射财经」独家获悉,锦程消费金融已暂停部分自营小额信贷业务,旗下锦囊贷App已经下架&am…...

Python爬虫在框架下的合规操作与风险控制

大家好!作为一名专业的爬虫代理供应商,我今天要和大家分享一些关于Python爬虫在法律框架下的合规操作与风险控制的知识。随着互联网的发展,数据爬取在商业和研究领域扮演着重要的角色,但我们也必须遵守相关法律和规定,…...

前端页面如何创建表格?table的结构、属性有哪些?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ HTML是什么?⭐ table标签的属性⭐ 注意事项⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 欢迎来到前端入门之旅!这个专栏…...

神码ai伪原创工具【php源码】

大家好,小编为大家解答python炫酷烟花表白源代码的问题。很多人还不知道html代码烟花特效python,现在让我们一起来看看吧! 火车头采集ai伪原创插件截图: 目录 前言 环境准备 代码编写 效果展示 前言 Python实现浪漫的烟花特效 现在…...

Linux命令200例:mkdir用于创建目录(常用)

🏆作者简介,黑夜开发者,全栈领域新星创作者✌。CSDN专家博主,阿里云社区专家博主,2023年6月csdn上海赛道top4。 🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。 &…...

C语言内嵌汇编

反编译(二进制文件或者so库) objdump --help objdump -M intel -j .text -ld -C -S out > out.txt #显示源代码同时显示行号, 代码段反汇编-M intel 英特尔语法-M x86-64-C:将C符号名逆向解析-S 反汇编的同时,将反汇编代码和源代码交替显…...

《网络是怎样连接的》(三)

《网络是怎样连接的》(二.2)_qq_38480311的博客-CSDN博客 本文主要取材于 《网络是怎样连接的》 第三章。 简述:本文主要内容是解释 通过网线传输出去的包是如何经过集线器、交换机和路由器等网络设备,最终进入互联网的。 信号…...

Speechless:如何用一款免费Chrome插件永久保存你的微博记忆

Speechless:如何用一款免费Chrome插件永久保存你的微博记忆 【免费下载链接】Speechless 把新浪微博的内容,导出成 PDF 文件进行备份的 Chrome Extension。 项目地址: https://gitcode.com/gh_mirrors/sp/Speechless 在数字时代,我们的…...

5大维度解析开源飞控核心技术:PX4自主飞行全链路实战指南

5大维度解析开源飞控核心技术:PX4自主飞行全链路实战指南 【免费下载链接】PX4-Autopilot PX4 Autopilot Software 项目地址: https://gitcode.com/gh_mirrors/px/PX4-Autopilot 无人机飞控开发是融合多学科知识的复杂工程领域,而PX4作为开源飞控…...

(96页PPT)新员工入职专题安全教育(附下载方式)

篇幅所限,本文只提供部分资料内容,完整资料请看下面链接 https://download.csdn.net/download/AI_data_cloud/89624194 资料解读:《新员工入职专题安全教育》 详细资料请看本解读文章的最后内容。 新员工是企业发展的新鲜血液,…...

完整B站字幕提取解决方案:三步搞定视频字幕获取与转换

完整B站字幕提取解决方案:三步搞定视频字幕获取与转换 【免费下载链接】BiliBiliCCSubtitle 一个用于下载B站(哔哩哔哩)CC字幕及转换的工具; 项目地址: https://gitcode.com/gh_mirrors/bi/BiliBiliCCSubtitle 你是否曾经在B站看到精彩的教学视频&#xff0c…...

YOLO-v8.3零售行业应用:货架商品识别,库存管理自动化

YOLO-v8.3零售行业应用:货架商品识别,库存管理自动化 1. 零售行业痛点与解决方案 零售行业每天面临数以万计的商品需要管理,传统的人工盘点方式不仅耗时耗力,还容易出现误差。根据行业统计,一家中型超市每月因库存不…...

Spring Data Redis实战全攻略:从集群部署到实时流处理

Spring Data Redis实战全攻略:从集群部署到实时流处理 【免费下载链接】spring-data-examples Spring Data Example Projects 项目地址: https://gitcode.com/gh_mirrors/sp/spring-data-examples Spring Data Redis是Spring生态中用于Redis数据存储的核心组…...

终极指南:Windows游戏控制器虚拟驱动ViGEmBus完全掌握

终极指南:Windows游戏控制器虚拟驱动ViGEmBus完全掌握 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus ViGEmBus是一款强大的Windows内核模式驱动…...

OpenClaw成本控制:Qwen2.5-VL-7B图文任务Token消耗优化

OpenClaw成本控制:Qwen2.5-VL-7B图文任务Token消耗优化 1. 多模态任务Token消耗的痛点 当我第一次用OpenClaw对接Qwen2.5-VL-7B模型处理图文混合任务时,账单上的Token消耗数字让我倒吸一口凉气。一个简单的"分析截图内容并生成报告"的任务&a…...

人工智能创意工作流:Pixel Script Temple 与 AI Agent 协同创作

人工智能创意工作流:Pixel Script Temple 与 AI Agent 协同创作 1. 多智能体协作的艺术革命 当三个专业AI Agent组成创意团队,会产生怎样的化学反应?这套由Pixel Script Temple驱动的协同工作流,正在重新定义数字艺术创作的可能…...

造相-Z-Image代码实例:Streamlit双栏UI自定义参数调节逻辑解析

造相-Z-Image代码实例:Streamlit双栏UI自定义参数调节逻辑解析 1. 项目概述 造相-Z-Image是一个基于通义千问官方Z-Image模型的本地轻量化文生图系统,专门为RTX 4090显卡进行深度优化。该系统采用BF16高精度推理技术,具备显存极致防爆能力&…...