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

TypeScript接口

接口

在编程中,接口是一种编程规范,它定义了行为和动作规范,接口起到了规范的作用,比如长方形必须要有长和宽,至于是多少不管,但是必须要有,

接口不关心实现的细节是什么。

interface vs type

  • interface(接口)和 type(类型别名)的对比:
  • 相同点:都可以给对象指定类型
  • 不同点:
    • 接口,只能为对象指定类型
    • 类型别名,不仅可以为对象指定类型,实际上可以为任意类型指定别名
  • 推荐:能使用 type 就是用 type
interface IPerson {name: stringage: numbersayHi(): void
}// 为对象类型创建类型别名
type IPerson = {name: stringage: numbersayHi(): void
}// 为联合类型创建类型别名
type NumStr = number | string

属性类型接口

interface User {name: string,age: number,address?:string
}let user1:User = {name: 'zs',age: 15
}let user2:User = {name: 'ls',age: 20,address: '重庆'
}

定义接口,使用interface关键字定义接口,定义好后,接口内部是属性可以起到约束作用。

函数属性接口

interface User {name: string,age: number
}function show(user: User):User[] {return [user]
}

函数的参数以及返回的数据类型都可以使用interface接口去定义,起到复用效果。

函数类型接口

接口可以定义一个函数类型,可以对函数的参数以及返回值做约束

interface Login{(account:string,password:number):string
}let login:Login = function(account, password) {return ''
}

可索引接口

对象可索引接口
interface User {name: string,[k: string]: any
}let user:User = {name: 'zs',age: 12
}

[k: string]:代表对象中的键必须是字符串,其中k是一个变量,可以随意命名

[k: string]: any:右侧的any代表对象中属性的值是任意类型。

数组可索引接口
interface numberArray {[i: number]:number
}
let arr1:numberArray=[1,5]interface stringArray {[i: number]:string
}
let arr2:stringArray = ['1','2']export {}

[i: number]:代表数组的下标必须是数字

[i: number]: number:右侧的number代表数组的值必须存放数字

当一个对象类型被多次使用时,一般会使用接口(interface)来描述对象的类型,达到复用的目的

  • 解释:
    1. 使用 interface 关键字来声明接口
    2. 接口名称(比如,此处的 IPerson),可以是任意合法的变量名称,推荐以 I 开头
    3. 声明接口后,直接使用接口名称作为变量的类型
    4. 因为每一行只有一个属性类型,因此,属性类型后没有 ;(分号)
interface IPerson {name: stringage: numbersayHi(): void
}let person: IPerson = {name: 'jack',age: 19,sayHi() {}
}

类类型接口

  • 类的继承是单继承,不能是多继承
  • 接口可以对类进行约束,可以约束类中必须有某些方法。
  • 类要实现接口才能达到约束目的

通过implements实现接口
interface IPsp {playGame(name: string): void
}interface IPhone {call(name: string): void;playGame(name: string): void;
}class Psp implements IPsp {playGame(name: string): void {console.log('正在玩' + name);}
}class Phone implements IPhone {call(name: string): void {console.log('打电话给' + name);}playGame(name: string): void {console.log('正在玩' + name);}}

类可以实现多个接口,使用逗号隔开

interface Paizhao {takePhoto(): void
}interface IPhone {call(name: string): void;playGame(name: string): void;
}class Phone implements IPhone, Paizhao {takePhoto(): void {console.log('正在拍照');}call(name: string): void {console.log('打电话给' + name);}playGame(name: string): void {console.log('正在玩' + name);}
}

接口中定义一个方法有两种方式:

interface IPhone {call(name: string): void;playGame: (name: string) => void
}

接口继承

  • 如果两个接口之间有相同的属性或方法,可以将公共的属性或方法抽离出来,通过继承来实现复用
  • 比如,这两个接口都有 x、y 两个属性,重复写两次,可以,但很繁琐

interface Point2D { x: number; y: number }
interface Point3D { x: number; y: number; z: number }

  • 更好的方式:
interface Point2D { x: number; y: number }
// 继承 Point2D
interface Point3D extends Point2D {z: number
}

  • 解释:
    1. 使用 extends(继承)关键字实现了接口 Point3D 继承 Point2D
    2. 继承后,Point3D 就有了 Point2D 的所有属性和方法(此时,Point3D 同时有 x、y、z 三个属性)

与类型别名的区别

  • 接口只能用在对象类型中
// 接口类型
interface A {username: string,age: number
}
let a: A = {username: 'zs',age: 12
}// 别名
type B = string;
let b: B = 'hello'

  • 接口可以合并
// 接口
interface A {username: string
}
interface A {age: number
}
let a: A = {username: 'zs',age: 12
}// 别名--报错
type A = {username: string
}
type A = {age: number
}
let a: A = {username: 'zs',age: 12
}

  • 接口可以继承
//接口
interface A {username: string
}
interface B extends A {age: number
}
let b: B = {username: 'li',age: 16
}// 别名--报错
type A  = {username: string
}
type B extends A {age: number
}
let b: B = {username: 'li',age: 16
}

  • 类型名别具有映射类型的写法
// 别名
type A = {[P in 'username' | 'age']: string
}// 接口 -- 报错
interface B {[P in 'username' | 'age']: string
}

相关文章:

TypeScript接口

接口 在编程中,接口是一种编程规范,它定义了行为和动作规范,接口起到了规范的作用,比如长方形必须要有长和宽,至于是多少不管,但是必须要有, 接口不关心实现的细节是什么。 interface vs type…...

Java | Leetcode Java题解之第397题整数替换

题目: 题解: class Solution {public int integerReplacement(int n) {int ans 0;while (n ! 1) {if (n % 2 0) {ans;n / 2;} else if (n % 4 1) {ans 2;n / 2;} else {if (n 3) {ans 2;n 1;} else {ans 2;n n / 2 1;}}}return ans;} }...

MySQL的 where 1=1会不会影响性能

MySQL的 where 11会不会影响性能? 一、引言 在编写SQL语句时,我们经常会遇到需要动态拼接查询条件的情况,尤其是在使用MyBatis这类ORM框架时。为了简化代码,很多开发者会使用where 11来开始他们的查询语句,然后通过程…...

工业连接器 如何有效提高自动化生产?

随着工业4.0的推进,生产自动化已经成为现代制造业的重要趋势。在这一过程中,工业连接器作为电气系统的关键组件,扮演着至关重要的角色。工业连接器不仅确保了设备间的稳定连接,而且在提高生产效率、保障系统可靠性以及支持设备间的…...

虚表生成时机与多态开始时机

虚表生成在父类构造完之后,子类构造之前 ,生成父类虚表,再执行子类的构造,这时虚表已经重写,可以多态(即开始派生类构造初始化列表代码)。 验证:输出This is animal miao miao mia…...

web前端面试题精选

1. W3C标准有哪些? W3C推行的主要规范有HTML,CSS,XML,XHTML和DOM(Document Object Model)。2. 谈谈Js的内存泄露问题。 3. 谈谈对Html 5的了解。 4. 谈谈对CSS 3的了解。 5. 用js实现随即选取10--100之间的10个数字,存入一个数组,并排序。 var iArray = []; funt…...

程序员转型大模型开发,可以转型成功吗?

序员转型成为大模型(如深度学习或大规模语言模型)的开发者是完全可能的,尤其是随着人工智能领域的快速发展,这一领域的需求也在不断增长。以下是一些步骤和建议,可以帮助程序员顺利地进行这种职业转型: 学习…...

Threejs之球发射实战

本文目录 前言一、效果预览二、代码实现及解析2.1 代码2.2 解析 前言 本篇将基于Threejs之模拟小球反弹基础上以及Threejs这个专栏学习过的知识点上进行小球更加真实的物理运动轨迹,并且还会与鼠标进行交互的操作。由于知识点都在上篇均有涉及,本篇就不过…...

详解新规|逐条分析《电子认证服务管理办法(征求意见稿)》修订重点

近日,工信部就《电子认证服务管理办法(征求意见稿)》公开征求意见。 来源|公开资料 图源|Pixabay 编辑|公钥密码开放社区 《电子认证服务管理办法》(以下简称《办法》)于2009年2…...

哪个编程工具让你的工作效率翻倍?

✍️作者简介:小北编程(专注于HarmonyOS、Android、Java、Web、TCP/IP等技术方向) 🐳博客主页: 开源中国、稀土掘金、51cto博客、博客园、知乎、简书、慕课网、CSDN 🔔如果文章对您有一定的帮助请&#x1f…...

SEW变频器的特点

SEW变频器是德国SEW-EURODRIVE GmbH公司生产的一种变频器产品,该公司是全球领先的驱动技术和系统解决方案提供商之一。以下是关于SEW变频器的详细介绍: 一、产品特点 高效节能:SEW变频器采用先进的电力电子技术和控制技术,能够实…...

大象机械人------1、关节控制

回到首页 目录 1 单关节控制 角度控制:1.1 send_angle(id, degree, speed)电位值控制:1.2 set_encoder(joint_id, encoder) 2 多关节控制 获取所有角度:2.1 get_angles()角度控制:2.2 send_angles(degrees, speed)电位值控制&…...

油电叉车倒车防撞报警系统精准探测

油电叉车倒车防撞报警系统通过集成最新的传感器技术、图像识别算法以及智能控制技术‌,通过实时监测叉车周围环境中的障碍物、行人和其他叉车,及时发出警报,避免可能的碰撞事故。 油电叉车倒车防撞报警系统功能详解 精准探测 叉车倒车时&a…...

Java学习路线:从零基础到高级开发者的完整指南

初学者入门指南 1. 环境搭建 安装JDK: 下载并安装最新版本的JDK(Java Development Kit)。配置环境: 设置JAVA_HOME环境变量,并将bin目录添加到PATH中。选择IDE: 使用Eclipse、IntelliJ IDEA或其他任何你喜欢的Java集成开发环境。 2. Java基…...

【Java算法】递归

🔥个人主页: 中草药 🔥专栏:【算法工作坊】算法实战揭秘 🍇一.递归 概念 递归是一种解决问题的方法,其中函数通过调用自身来求解问题。这种方法的关键在于识别问题是否可以被分解为若干个相似但规模更小…...

NIDS——suricata(三)

一、监控ICMP流量 1、ICMP流量特征 四大特征分别为:消息类型(Type)、代码(Code)、校验和(Checksum)、数据字段(Data Field)。这里我们使用 type消息类型。 ICMP 消息的类…...

运动耳机哪个牌子最好用?年度精选五款好用的骨传导耳机推荐

相信大家都已经深有体会,拿那种常规的入耳式无线蓝牙耳机来做运动耳机,很难满足运动需要。如果选择前两年流行的颈挂式无线运动蓝牙耳机,虽然简单轻巧,但也是入耳式设计,长时间佩戴耳朵不舒服。这样看来,运…...

鞋服企业信息化建设若干架构分享

鞋服企业的信息化建设有着自身的一些特点,这些特点主要体现在以下几个方面: 集成化:鞋服企业的信息化建设往往需要集成多种系统,如企业资源规划系统(ERP)、客户关系管理系统(CRM)、供…...

比较顺序3s1和3s2的搜索难度

在行列可自由变换的平面上,3点结构只有6个 (A,B)---6*30*2---(0,1)(1,0) 分类A和B,让A是6个3点结构,让B全是0。当收敛误差为7e-4,收敛199次取迭代次数平均值, 让训练集A-B矩阵的高分别是3,4,5…...

Vue3 el-switch @change事件在初始化时会自动调用问题

接收一个vue3项目&#xff0c;突然有一天&#xff0c;table里有个switch开关&#xff0c;请求数据之后就开始执行switch的change事件&#xff0c;我还啥都没操作&#xff0c;就报一推重复请求 <template><el-switch v-model"rec" inline-prompt :active-val…...

浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)

✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义&#xff08;Task Definition&…...

React hook之useRef

React useRef 详解 useRef 是 React 提供的一个 Hook&#xff0c;用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途&#xff0c;下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...

屋顶变身“发电站” ,中天合创屋面分布式光伏发电项目顺利并网!

5月28日&#xff0c;中天合创屋面分布式光伏发电项目顺利并网发电&#xff0c;该项目位于内蒙古自治区鄂尔多斯市乌审旗&#xff0c;项目利用中天合创聚乙烯、聚丙烯仓库屋面作为场地建设光伏电站&#xff0c;总装机容量为9.96MWp。 项目投运后&#xff0c;每年可节约标煤3670…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

CRMEB 中 PHP 短信扩展开发:涵盖一号通、阿里云、腾讯云、创蓝

目前已有一号通短信、阿里云短信、腾讯云短信扩展 扩展入口文件 文件目录 crmeb\services\sms\Sms.php 默认驱动类型为&#xff1a;一号通 namespace crmeb\services\sms;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use crmeb\services\sms\…...

探索Selenium:自动化测试的神奇钥匙

目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...