Vue 如何简单更快的对 TypeScript 中接口的理解?应用场景?
TypeScript 中接口(Interface)的理解与应用
在 TypeScript 中,接口(Interface) 是一种用来定义对象的结构或形状的方式。接口可以指定对象中应该包含哪些属性、这些属性的类型以及它们的函数签名。接口帮助我们在代码中确保数据结构的正确性,并且能够提高代码的可读性和可维护性。
1. 接口的基本使用
接口定义了一个“合同”,它强制实施类或对象遵守某种结构。我们可以通过接口指定对象的属性和方法。
例子:
// 定义接口
interface Person {name: string;age: number;
}// 使用接口
const person: Person = {name: "Alice",age: 30
};
在上面的例子中,我们定义了一个 Person 接口,指定 Person 对象必须有 name 和 age 两个属性,并且分别是 string 和 number 类型。
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 接口的 name 和 age 属性,同时添加了一个新的属性 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 接口,确保类具有 name、age 属性和 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 类实现了 Flyable 和 Swimmable 两个接口,必须实现这两个接口中的方法。
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 中接口(Interface)的理解与应用 在 TypeScript 中,接口(Interface) 是一种用来定义对象的结构或形状的方式。接口可以指定对象中应该包含哪些属性、这些属性的类型以及它们的函数签名。接口帮助我们在代码…...
R语言绘图过程中遇到图例的图块中出现字符“a“的解决方法
R语言绘图过程中遇到图例的图块中出现字符的解决方法 因为我遇到这个问题的时候没在网上找到合适的方法,找到个需要付费的,算了。也许是因为问的方式不同,问了半天AI也回答出来,莫名有些烦躁,打算对代码做个分析&…...
视图合并机制解析 | OceanBase查询优化
背景 在默认配置下,若查询语句中嵌入了视图,系统会先等待视图内部所包含的查询完全执行完成后,再继续执行父查询。这种方式造成优化器无法将视图查询与外层查询视为一个整体来进行优化处理,从而限制了优化效果。因此,…...
sql注入报错分享(mssql+mysql)
mysql mysql的报错内容比较多 网上也有比较多的 这里重复的就不多介绍了。一笔带过 溢出类 bigint 当超过mysql的整形的时候,就会导致溢出,mysql可能会将错误信息带出。这里user()是字母默认为0 取反以后1可能就会导致异常。 报错特征 BIGINT UNSIG…...
PHP 高并发解决方案
PHP作为一种脚本语言,在处理高并发请求时可能面临一些挑战。但通过合理的设计和优化,可以有效提升PHP应用程序的性能和并发处理的能力。 一、缓存 页面缓存:将生成的页面缓存起来,减少对数据库的查询,提高响应速度。…...
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…...
多摩川编码器协议及单片机使用
参考: https://blog.csdn.net/qq_28149763/article/details/132718177 https://mp.weixin.qq.com/s/H4XoR1LZSMH6AxsjZuOw6g 1、多摩川编码器协议 多摩川数据通讯是基于485 硬件接口标准NRZ 协议,通讯波特率为2.5Mbps 的串行通讯,采用差分两…...
Android 网络通信(三)OkHttp实现登入
学习笔记 目录 一. 先写XML布局 二、创建 LoginResponse 类 :封装响应数据 目的和作用: 三、创建 MyOkHttp 类 :发送异步请求 代码分析 可能改进的地方 总结 四、LoginActivity 类中实现登录功能 详细分析与注释: 总结: 改进建议: 零、响应数据样例 通过 P…...
分享一下arr的意义(c基础)(必看)(牢记)
arr 即数组名 一般指数组首元素地址 在两种情况下不是 1:sizeof(arr) arr指整个数组简单讲解一下strlen与sizeof(c基础)_strzeof在c语言中什么意思-CSDN博客 2:printf("%p",&…...
AGENT AI 综述核心速览
研究背景 研究问题:这篇文章探讨了多模态人工智能(Agent AI)系统在理解和响应视觉和语言输入方面的潜力,特别是在物理和虚拟环境中的应用。Agent AI旨在通过感知和行动来增强人工智能系统的交互性和适应性。研究难点:…...
基于Java Springboot房屋租赁系统
一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…...
力扣 LeetCode 701. 二叉搜索树中的插入操作(Day10:二叉树)
解题思路: 全部插入到叶子节点即可 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 特殊定制领域的卓越引领者
一、专业团队,创新设计之源 猎板科技的核心竞争力首先源于其卓越的专业团队。这支队伍汇聚了经验丰富的资深工程师以及行业前沿的技术专家,他们在 PCB 设计领域拥有深厚的造诣和敏锐的洞察力。无论是面对常规 PCB 设计任务,还是应对极具挑战…...
centos stream 9安装docker教程
第一步:安装该dnf-plugins-core软件包(它提供了管理 DNF 存储库的命令) sudo dnf -y install dnf-plugins-core 第二步:设置存储库(这里使用的是阿里云的镜像源) sudo dnf config-manager --add-repo https://mirrors.aliyun.c…...
优化旧LabVIEW程序功能的方法
优化运行已久的LabVIEW程序时,需在不影响原有功能的基础上针对目标功能进行改进。以下结合一个数据采集功能优化的实例,详细说明操作步骤和注意事项,为工程师提供切实可行的方法。 优化背景 某企业的LabVIEW程序负责多通道数据采集…...
关于安卓模拟器或手机设置了BurpSuite代理和安装证书后仍然抓取不到APP数据包的解决办法
免责申明 本文仅是用于学习研究安卓系统设置代理后抓取不到App数据包实验,请勿用在非法途径上,若将其用于非法目的,所造成的一切后果由您自行承担,产生的一切风险和后果与笔者无关;本文开始前请认真详细学习《中华人民共和国网络安全法》【学法时习之丨网络安全在身边一…...
【电路笔记】-布尔逻辑AND函数
逻辑AND函数 文章目录 逻辑AND函数1、概述2、逻辑 AND 函数 仅当所有输入均为 true 时,逻辑与函数输出才为 true,否则输出为 false。 1、概述 布尔代数基于逻辑函数,其中每个布尔函数(例如逻辑 AND 函数)通常具有一个…...
C#(11) 运算符重载
前言 我们知道函数是可以重载的,重载后的作用是干嘛呢?其实就是为了方便适应不同的参数传递。 那运算符我们也可以理解是一个函数,只是我们希望为更多的参数引入运算符使得他们可以被计算。 c#设计这么一块功能,其实也是为了方…...
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(证据下界)——机器学习中的“情感纽带” 关键词提炼 #ELBO #证据下界 #变分推断 #机器学习 #潜变量模型 #KL散度 #期望 #对数似然 第一节:ELBO的类比与核心概念【尽可能通俗】 ELBO,即证据下界,在…...
《Qt C++ 与 OpenCV:解锁视频播放程序设计的奥秘》
引言:探索视频播放程序设计之旅 在当今数字化时代,多媒体应用已渗透到我们生活的方方面面,从日常的视频娱乐到专业的视频监控、视频会议系统,视频播放程序作为多媒体应用的核心组成部分,扮演着至关重要的角色。无论是在个人电脑、移动设备还是智能电视等平台上,用户都期望…...
React Native在HarmonyOS 5.0阅读类应用开发中的实践
一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强,React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 (1)使用React Native…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
Spring AI与Spring Modulith核心技术解析
Spring AI核心架构解析 Spring AI(https://spring.io/projects/spring-ai)作为Spring生态中的AI集成框架,其核心设计理念是通过模块化架构降低AI应用的开发复杂度。与Python生态中的LangChain/LlamaIndex等工具类似,但特别为多语…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
重启Eureka集群中的节点,对已经注册的服务有什么影响
先看答案,如果正确地操作,重启Eureka集群中的节点,对已经注册的服务影响非常小,甚至可以做到无感知。 但如果操作不当,可能会引发短暂的服务发现问题。 下面我们从Eureka的核心工作原理来详细分析这个问题。 Eureka的…...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
【笔记】WSL 中 Rust 安装与测试完整记录
#工作记录 WSL 中 Rust 安装与测试完整记录 1. 运行环境 系统:Ubuntu 24.04 LTS (WSL2)架构:x86_64 (GNU/Linux)Rust 版本:rustc 1.87.0 (2025-05-09)Cargo 版本:cargo 1.87.0 (2025-05-06) 2. 安装 Rust 2.1 使用 Rust 官方安…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
