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

Vue 如何简单更快的对 TypeScript 中接口的理解?应用场景?

TypeScript 中接口(Interface)的理解与应用

在 TypeScript 中,接口(Interface) 是一种用来定义对象的结构或形状的方式。接口可以指定对象中应该包含哪些属性、这些属性的类型以及它们的函数签名。接口帮助我们在代码中确保数据结构的正确性,并且能够提高代码的可读性和可维护性。

1. 接口的基本使用

接口定义了一个“合同”,它强制实施类或对象遵守某种结构。我们可以通过接口指定对象的属性和方法。

例子:

// 定义接口
interface Person {name: string;age: number;
}// 使用接口
const person: Person = {name: "Alice",age: 30
};

在上面的例子中,我们定义了一个 Person 接口,指定 Person 对象必须有 nameage 两个属性,并且分别是 stringnumber 类型。

2. 可选属性

接口的属性可以是可选的,通过在属性名后面加上 ? 来实现。这意味着对象可以有这些属性,也可以没有。

例子:

interface Person {name: string;age: number;address?: string;  // 可选属性
}const person1: Person = {name: "Alice",age: 30
};const person2: Person = {name: "Bob",age: 25,address: "123 Main St"
};

在这个例子中,address 是可选的,因此 person1 可以没有 address 属性,person2 可以有 address 属性。

3. 只读属性

接口的属性可以是只读的,这意味着一旦对象被创建后,属性值不能被修改。通过使用 readonly 关键字来定义只读属性。

例子:

interface Person {readonly id: number;name: string;age: number;
}const person: Person = {id: 1,name: "Alice",age: 30
};// person.id = 2;  // 错误:不能修改只读属性

在上面的代码中,id 是只读属性,因此不能在创建后修改它的值。

4. 函数类型接口

接口还可以定义函数的类型,描述函数的输入和输出。

例子:

interface Greeter {(name: string): string;
}const greet: Greeter = (name) => {return `Hello, ${name}!`;
};console.log(greet("Alice")); // 输出 "Hello, Alice!"

在这个例子中,Greeter 接口定义了一个函数类型,要求该函数接收一个 string 类型的参数,并返回一个 string 类型的结果。

5. 接口继承

接口可以通过继承来扩展其他接口的属性。继承后的接口可以继承原接口的所有属性和方法。

例子:

interface Animal {name: string;age: number;
}interface Dog extends Animal {breed: string;
}const myDog: Dog = {name: "Buddy",age: 5,breed: "Golden Retriever"
};

在这个例子中,Dog 接口继承了 Animal 接口的 nameage 属性,同时添加了一个新的属性 breed

6. 类与接口

接口不仅可以用于普通对象,也可以用于类。类可以通过实现接口来确保它遵守接口的约定。

例子:

interface Person {name: string;age: number;greet(): void;
}class Employee implements Person {name: string;age: number;jobTitle: string;constructor(name: string, age: number, jobTitle: string) {this.name = name;this.age = age;this.jobTitle = jobTitle;}greet(): void {console.log(`Hello, my name is ${this.name}, and I am a ${this.jobTitle}.`);}
}const emp = new Employee("Alice", 30, "Software Engineer");
emp.greet();  // 输出 "Hello, my name is Alice, and I am a Software Engineer."

在这个例子中,Employee 类实现了 Person 接口,确保类具有 nameage 属性和 greet 方法。

7. 多重接口实现

一个类可以实现多个接口,TypeScript 允许一个类实现多个接口。

例子:

interface Flyable {fly(): void;
}interface Swimmable {swim(): void;
}class Duck implements Flyable, Swimmable {fly(): void {console.log("Flying...");}swim(): void {console.log("Swimming...");}
}const duck = new Duck();
duck.fly();  // 输出 "Flying..."
duck.swim(); // 输出 "Swimming..."

在这个例子中,Duck 类实现了 FlyableSwimmable 两个接口,必须实现这两个接口中的方法。

8. 应用场景

8.1 配置对象和函数参数类型

接口常用于定义复杂配置对象或函数的参数类型,确保传入的数据结构正确。

interface Config {host: string;port: number;secure: boolean;
}function connect(config: Config) {console.log(`Connecting to ${config.host}:${config.port} with secure=${config.secure}`);
}const config: Config = {host: "localhost",port: 8080,secure: true
};connect(config);  // 输出 "Connecting to localhost:8080 with secure=true"
8.2 数据模型定义

接口在应用开发中常用于定义数据模型,特别是在处理复杂的数据结构时。

interface Product {id: number;name: string;price: number;
}const product: Product = {id: 1,name: "Laptop",price: 1000
};
8.3 类型约束与类型安全

接口提供了一种强类型的方式来约束对象的形状,可以帮助我们在开发过程中避免一些类型错误。

interface Point {x: number;y: number;
}function calculateDistance(p1: Point, p2: Point): number {return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
}const point1: Point = { x: 0, y: 0 };
const point2: Point = { x: 3, y: 4 };console.log(calculateDistance(point1, point2)); // 输出 5
8.4 组件设计与接口的使用

在前端开发中,特别是在 React 或 Vue 等框架中,接口经常用于定义组件的 props 类型。

interface ButtonProps {label: string;onClick: () => void;
}const Button = ({ label, onClick }: ButtonProps) => {return <button onClick={onClick}>{label}</button>;
};

9. 总结

  • 接口 是 TypeScript 中一种非常重要的结构,能够帮助我们定义对象的形状和结构。
  • 接口能定义必选属性可选属性只读属性,并且可以定义函数类型类的结构
  • 接口非常适合用于定义数据模型函数参数类型组件 props 类型等场景,增强代码的类型安全、可读性和可维护性。

相关文章:

Vue 如何简单更快的对 TypeScript 中接口的理解?应用场景?

TypeScript 中接口&#xff08;Interface&#xff09;的理解与应用 在 TypeScript 中&#xff0c;接口&#xff08;Interface&#xff09; 是一种用来定义对象的结构或形状的方式。接口可以指定对象中应该包含哪些属性、这些属性的类型以及它们的函数签名。接口帮助我们在代码…...

R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法

R语言绘图过程中遇到图例的图块中出现字符的解决方法 因为我遇到这个问题的时候没在网上找到合适的方法&#xff0c;找到个需要付费的&#xff0c;算了。也许是因为问的方式不同&#xff0c;问了半天AI也回答出来&#xff0c;莫名有些烦躁&#xff0c;打算对代码做个分析&…...

视图合并机制解析 | OceanBase查询优化

背景 在默认配置下&#xff0c;若查询语句中嵌入了视图&#xff0c;系统会先等待视图内部所包含的查询完全执行完成后&#xff0c;再继续执行父查询。这种方式造成优化器无法将视图查询与外层查询视为一个整体来进行优化处理&#xff0c;从而限制了优化效果。因此&#xff0c;…...

sql注入报错分享(mssql+mysql)

mysql mysql的报错内容比较多 网上也有比较多的 这里重复的就不多介绍了。一笔带过 溢出类 bigint 当超过mysql的整形的时候&#xff0c;就会导致溢出&#xff0c;mysql可能会将错误信息带出。这里user()是字母默认为0 取反以后1可能就会导致异常。 报错特征 BIGINT UNSIG…...

PHP 高并发解决方案

PHP作为一种脚本语言&#xff0c;在处理高并发请求时可能面临一些挑战。但通过合理的设计和优化&#xff0c;可以有效提升PHP应用程序的性能和并发处理的能力。 一、缓存 页面缓存&#xff1a;将生成的页面缓存起来&#xff0c;减少对数据库的查询&#xff0c;提高响应速度。…...

k8s1.30.0高可用集群部署

负载均衡 nginx负载均衡 两台nginx负载均衡 vim /etc/nginx/nginx.conf stream {upstream kube-apiserver {server 192.168.0.11:6443 max_fails3 fail_timeout30s;#server 192.168.0.12:6443 max_fails3 fail_timeout30s;#server 192.168.0.13:6443 max_fails3…...

多摩川编码器协议及单片机使用

参考&#xff1a; https://blog.csdn.net/qq_28149763/article/details/132718177 https://mp.weixin.qq.com/s/H4XoR1LZSMH6AxsjZuOw6g 1、多摩川编码器协议 多摩川数据通讯是基于485 硬件接口标准NRZ 协议&#xff0c;通讯波特率为2.5Mbps 的串行通讯&#xff0c;采用差分两…...

Android 网络通信(三)OkHttp实现登入

学习笔记 目录 一. 先写XML布局 二、创建 LoginResponse 类 :封装响应数据 目的和作用: 三、创建 MyOkHttp 类 :发送异步请求 代码分析 可能改进的地方 总结 四、LoginActivity 类中实现登录功能 详细分析与注释: 总结: 改进建议: 零、响应数据样例 通过 P…...

分享一下arr的意义(c基础)(必看)(牢记)

arr 即数组名 一般指数组首元素地址 在两种情况下不是 1&#xff1a;sizeof&#xff08;arr&#xff09; arr指整个数组简单讲解一下strlen与sizeof&#xff08;c基础&#xff09;_strzeof在c语言中什么意思-CSDN博客 2&#xff1a;printf&#xff08;"%p",&…...

AGENT AI 综述核心速览

研究背景 研究问题&#xff1a;这篇文章探讨了多模态人工智能&#xff08;Agent AI&#xff09;系统在理解和响应视觉和语言输入方面的潜力&#xff0c;特别是在物理和虚拟环境中的应用。Agent AI旨在通过感知和行动来增强人工智能系统的交互性和适应性。研究难点&#xff1a;…...

基于Java Springboot房屋租赁系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术&#xff1a;Html、Css、Js、Vue、Element-ui 数据库&#xff1a;MySQL 后端技术&#xff1a;Java、Spring Boot、MyBatis 三、运行环境 开发工具&#xff1a;IDEA/eclipse 数据…...

力扣 LeetCode 701. 二叉搜索树中的插入操作(Day10:二叉树)

解题思路&#xff1a; 全部插入到叶子节点即可 class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if (root null) {TreeNode node new TreeNode(val);return node;}if (root.val < val) {root.right insertIntoBST(root.right, val);}if (root…...

猎板科技:PCB 特殊定制领域的卓越引领者

一、专业团队&#xff0c;创新设计之源 猎板科技的核心竞争力首先源于其卓越的专业团队。这支队伍汇聚了经验丰富的资深工程师以及行业前沿的技术专家&#xff0c;他们在 PCB 设计领域拥有深厚的造诣和敏锐的洞察力。无论是面对常规 PCB 设计任务&#xff0c;还是应对极具挑战…...

centos stream 9安装docker教程

第一步&#xff1a;安装该dnf-plugins-core软件包&#xff08;它提供了管理 DNF 存储库的命令&#xff09; sudo dnf -y install dnf-plugins-core 第二步&#xff1a;设置存储库(这里使用的是阿里云的镜像源) sudo dnf config-manager --add-repo https://mirrors.aliyun.c…...

优化旧LabVIEW程序功能的方法

优化运行已久的LabVIEW程序时&#xff0c;需在不影响原有功能的基础上针对目标功能进行改进。以下结合一个数据采集功能优化的实例&#xff0c;详细说明操作步骤和注意事项&#xff0c;为工程师提供切实可行的方法。 优化背景 某企业的LabVIEW程序负责多通道数据采集&#xf…...

关于安卓模拟器或手机设置了BurpSuite代理和安装证书后仍然抓取不到APP数据包的解决办法

免责申明 本文仅是用于学习研究安卓系统设置代理后抓取不到App数据包实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《‌中华人民共和国网络安全法》【学法时习之丨网络安全在身边一…...

【电路笔记】-布尔逻辑AND函数

逻辑AND函数 文章目录 逻辑AND函数1、概述2、逻辑 AND 函数 仅当所有输入均为 true 时&#xff0c;逻辑与函数输出才为 true&#xff0c;否则输出为 false。 1、概述 布尔代数基于逻辑函数&#xff0c;其中每个布尔函数&#xff08;例如逻辑 AND 函数&#xff09;通常具有一个…...

C#(11) 运算符重载

前言 我们知道函数是可以重载的&#xff0c;重载后的作用是干嘛呢&#xff1f;其实就是为了方便适应不同的参数传递。 那运算符我们也可以理解是一个函数&#xff0c;只是我们希望为更多的参数引入运算符使得他们可以被计算。 c#设计这么一块功能&#xff0c;其实也是为了方…...

Linux下Intel编译器oneAPI安装和链接MKL库编译

参考: https://blog.csdn.net/qq_44263574/article/details/123582481 官网下载: https://www.intel.com/content/www/us/en/developer/tools/oneapi/base-toolkit-download.html?packagesoneapi-toolkit&oneapi-toolkit-oslinux&oneapi-linoffline 填写邮件和国家,…...

【通俗理解】ELBO(证据下界)——机器学习中的“情感纽带”

【通俗理解】ELBO&#xff08;证据下界&#xff09;——机器学习中的“情感纽带” 关键词提炼 #ELBO #证据下界 #变分推断 #机器学习 #潜变量模型 #KL散度 #期望 #对数似然 第一节&#xff1a;ELBO的类比与核心概念【尽可能通俗】 ELBO&#xff0c;即证据下界&#xff0c;在…...

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式&#xff1a; 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

【JavaSE】绘图与事件入门学习笔记

-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角&#xff0c;以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向&#xff0c;距离坐标原点x个像素;第二个是y坐标&#xff0c;表示当前位置为垂直方向&#xff0c;距离坐标原点y个像素。 坐标体系-像素 …...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

大数据学习(132)-HIve数据分析

​​​​&#x1f34b;&#x1f34b;大数据学习&#x1f34b;&#x1f34b; &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4…...

2025季度云服务器排行榜

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