TypeScript 基础学习笔记:interface 与 type 的异同
文章目录
- TypeScript 学习笔记:`interface` 与 `type` 的异同
- 🎣 引言
- 🚀 快速入门
- 1️⃣ Interface(接口)
- 📋 定义
- 🤝 实现
- 💡 特点
- 2️⃣ Type Aliases(类型别名)
- 📜 定义
- 🎯 应用
- 🧠 特点
- 📊 `interface` 与 `type` 的区别
- 🌟 实践建议
- 🚀 总结
TypeScript 学习笔记:interface
与 type
的异同
🎣 引言
在
TypeScript
的世界里,精准的类型定义是保证代码质量与团队协作效率的关键。interface
和type
作为两种核心的类型定义工具,它们各自承载着不同的设计意图与应用场景。本文旨在清晰阐述两者的基本概念、应用场景及核心差异,帮助开发者在实际编码过程中做出更为合适的选择,进一步提升代码的健壮性和可维护性。
🚀 快速入门
在 TypeScript
中,类型系统是为了增强 JavaScript
的类型安全。interface
和 type
都是创建自定义类型的手段,但它们各自有着独特的应用场景和特点。
1️⃣ Interface(接口)
📋 定义
interface
用于描述对象的形状(shape),即一组必须遵循的属性和方法的集合。它可以用于类的实现、函数参数的类型约束,甚至是变量的类型注解。
interface Person {name: string;age: number;greet(): void; // 描述一个方法
}
🤝 实现
类可以实现一个接口,强制类具有接口规定的属性和方法。
class Student implements Person {name: string;age: number;constructor(name: string, age: number) {this.name = name;this.age = age;}greet(): void {console.log(`Hello, I'm ${this.name} and I'm ${this.age} years old.`);}
}
💡 特点
- 可扩展性:接口可以合并(通过重复声明接口名并添加新成员),实现接口的类或接口可以逐渐积累成员。
- 面向对象友好:更适合面向对象编程中的抽象定义。
2️⃣ Type Aliases(类型别名)
📜 定义
type
关键字用于创建一个新的名字来引用现有的类型,它可以是原始类型、联合类型、元组类型、甚至其他接口类型。
type StringOrNumber = string | number;
type Point = [number, number];
type Admin = { role: 'admin'; permissions: string[]
};
🎯 应用
- 简单替换:简化复杂的类型表达式。
- 联合类型:定义可以是多种类型的变量。
- 接口兼容性替代:尽管
type
不能被继承,但可以用来定义对象类型,类似于interface
。
🧠 特点
- 灵活性:
type
更灵活,可以定义函数类型、元组、联合类型等。 - 不可扩展:与接口相比,类型别名一旦定义,就不能像接口那样通过合并来扩展。
- 互斥性:不能用
implements
关键字实现type
,适合非面向对象的场景。
📊 interface
与 type
的区别
- 扩展性:
interface
支持后续扩展,而type
不支持。 - 用途:
interface
适用于定义对象形状,尤其是面向对象设计;type
更通用,适用于各种类型定义,包括但不限于对象类型。 - 语法差异:
interface
可以直接定义方法签名,而type
定义对象类型时需使用对象字面量形式。
🌟 实践建议
- 对于需要描述对象结构或实现多态的场景,优先考虑使用
interface
。 - 当需要定义复杂的类型组合或函数类型时,使用
type
可能更加简洁和灵活。 - 根据具体需求和团队编码规范来决定使用哪个,两者并非互斥,经常需要配合使用以达到最佳效果。
🚀 总结
综上所述,interface
和 type
都是TypeScript中实现类型安全的重要机制,它们各有千秋,服务于不同的场景需求。
interface
凭借其开放性和面向对象的特性,非常适合用于定义和扩展对象结构及类的契约;而type
则以其灵活性和多样性,在处理联合类型、元组类型及更复杂的类型定义时展现出独特优势。
开发者应当根据具体的项目需求和代码风格,合理选择使用interface
或type
,或是两者结合,以达到最优的类型系统设计。理解它们之间的差异与联系,是每位TypeScript
开发者技能提升的重要一环。
相关文章:

TypeScript 基础学习笔记:interface 与 type 的异同
🔥 个人主页:空白诗 文章目录 TypeScript 学习笔记:interface 与 type 的异同🎣 引言🚀 快速入门1️⃣ Interface(接口)📋 定义🤝 实现💡 特点 2️⃣ Type Al…...

【管理咨询宝藏95】SRM采购平台建设内部培训方案
本报告首发于公号“管理咨询宝藏”,如需阅读完整版报告内容,请查阅公号“管理咨询宝藏”。 【管理咨询宝藏95】SRM采购平台建设内部培训方案 【格式】PDF版本 【关键词】SRM采购、制造型企业转型、数字化转型 【核心观点】 - 重点是建设一个适应战略采…...

第七届机电、机器人与自动化国际会议(ICMRA 2024)即将召开!
第七届机电、机器人与自动化国际会议(ICMRA 2024)将于2024年9月20日-22日在中国武汉举行。ICMRA 2024为各国专家学者提供一个学术交流的平台,讨论机电、机器人和自动化领域的最新研究成果和未来的研究方向,旨在能够建立起国家间&a…...

【智能楼宇秘籍】一网关多协议无缝对接BACnet+OPC+MQTT
在繁华的都市中心,一座崭新的大型商业综合体拔地而起,集购物、餐饮、娱乐、办公于一体,是现代城市生活的缩影。然而,这座综合体的幕后英雄——一套高度集成的楼宇自动化系统,正是依靠多功能协议网关,实现了…...

leetCode68. 文本左右对齐
基本思路: leetCode68. 文本左右对齐 代码 class Solution { public:vector<string> fullJustify(vector<string>& words, int maxWidth) {vector<string> res;for(int i 0; i < words.size(); i){ // 枚举有多少个单词int j i 1; //…...

搜狗输入法 PC端 v14.4.0.9307 去广告绿化版.
软件介绍 搜狗拼音输入法作为众多用户计算机配置的必备工具,其功能的全面性已为众所周知,并且以其高效便捷的输入体验受到广大使用者的青睐。然而,该软件在提供便利的同时,其内置的广告元素常常为用户带来一定的干扰。为此&#…...

【汇总】虚拟机网络不通(Xshell无法连接虚拟机)排查方法
搜索关键字关键字关键字:虚拟机虚拟机虚拟机连接失败、虚拟机无法连接、Xshell连接失败、ping baidu.com失败、静态IP设置 Kali、CentOS、远程连接 描述:物理机无法连接虚拟机;虚拟机无法访问百度,虚拟机无法访问baidu.com 虚拟机…...
C++开发基础之函数参数传递的几种类型
一、前言 在C中,接口指针或类对象的函数参数传递是一个常见的做法,特别是在需要支持多态或动态绑定时。这里将介绍如何传递接口指针或类对象作为函数参数。 二、函数参数传递的几种类型 抽象类(接口)的实例只能通过指针或引用传…...

使用memcache 和 redis 、 实现session 会话复制和保持
一、NoSQL介绍 NoSQL是对Not Only SQL、非传统关系型数据库的统称 NoSQL一词诞生于1998年,2009年这个词汇再次提出指非关系型、分布式、不提供ACID的数据库设计模式 随着互联网时代的数据爆发时增长、数据库技术发展的日新月异,要适应新的业务需求&am…...

Tomcat 优化
在目前流行的互联网架构中,Tomcat在目前的网络编程中是举足轻重的,由于Tomcat的运行依赖于JVM,从虚拟机的角度把Tomcat的调整分为外部环境调优 JVM 和 Tomcat 自身调优两部分。 一、JVM组成 1. JVM 组成 JVM组成部分 类加载子系统: 使用Ja…...

如何将pdf文件换成3d模型?---模大狮模型网
PDF文件是一种广泛用于文档传输和共享的格式,但在某些情况下,我们可能希望将其中的内容转换为更具交互性和视觉效果的3D模型。本文将介绍如何将PDF文件转换为3D模型,为您展示实现这一想象的步骤。 选择合适的PDF文件: 首先&#…...
Docker 中快速构建 Redis Cluster 集群
Docker 中快速构建 Redis Cluster 集群 目录 前言环境准备 所需软件配置网络 构建 Redis Cluster 镜像 创建自定义 Dockerfile构建镜像 启动 Redis 节点容器 启动命令 配置 Redis Cluster 集群 创建 Redis 集群验证集群状态 总结 前言 Redis 是一个高性能的键值对数据库&am…...

C语言----杨辉三角
各位看官们好。学习到这里想必大家应该对C语言的了解也是很深刻的了吧。但是我们也不能忘记我们一起学习的知识啊。在我们以前学习C语言的时候我想大家应该都听说过杨辉三角吧。虽然我们把其中的规律找到那么这个代码就简单很多了。那么接下里我们就来讲讲杨辉三角。 首先我们先…...

FlaUI
FlaUI是一个基于微软UIAutomation技术(简称UIA)的.NET库,它主要用于对Windows应用程序(如Win32、WinForms、WPF、Store Apps等)进行自动化UI测试。FlaUI的前身是TestStack.White,由Roemer开发,旨…...
MySQL调优-01反范式化表设计
MySQL调优-01反范式化表设计 数据库设计三范式 第一范式(1NF)。确保数据库表的每一列都是不可分割的原子数据项,即列中不可包含数组、记录等非原子数据项;确保表中没有重复的属性或列,每个属性只出现一次,…...

74从零开始学Java之排序算法中的冒泡和选择排序
作者:孙玉昌,昵称【一一哥】,另外【壹壹哥】也是我哦 CSDN博客专家、万粉博主、阿里云专家博主、掘金优质作者 前言 我们要想成为一个优秀的程序员,其实非常关键的一点就是要锻炼培养自己的编程思维,就好比一个狙击手,要通过大量的射击训练要用大量的子弹喂出来。同样的…...

【Qt问题】VS2019 Qt win32项目如何添加x64编译方式
往期回顾: 【Qt问题】Qt常用快捷键汇总-CSDN博客 【Qt问题】Qt Creator 如何链接第三方库-CSDN博客 【Qt问题】Qt 如何带参数启动外部进程-CSDN博客 【Qt问题】VS2019 Qt win32项目如何添加x64编译方式 我们都知道vs2019在编译项目的时候是需要选择编译环境的&…...

LabVIEW换智能仿真三相电能表研制
LabVIEW换智能仿真三相电能表研制 在当前电力工业飞速发展的背景下,确保电能计量的准确性与公正性变得尤为重要。本文提出了一种基于LabVIEW和单片机技术,具有灵活状态切换功能的智能仿真三相电能表,旨在通过技术创新提高电能计量人员的培训…...

Python | Leetcode Python题解之第69题x的平方根
题目: 题解: class Solution:def mySqrt(self, x: int) -> int:if x 0:return 0C, x0 float(x), float(x)while True:xi 0.5 * (x0 C / x0)if abs(x0 - xi) < 1e-7:breakx0 xireturn int(x0)...
libhv http client vs cpr
libhv http client 和 cpr 的性能对比 libhv test code static void test_http_async(HttpClient* cli, int seq, int* resp_cnt) {auto req std::make_shared<HttpRequest>();req->method HTTP_GET;req->url "www.baidu.com";req->timeout 1…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...

.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
安卓基础(aar)
重新设置java21的环境,临时设置 $env:JAVA_HOME "D:\Android Studio\jbr" 查看当前环境变量 JAVA_HOME 的值 echo $env:JAVA_HOME 构建ARR文件 ./gradlew :private-lib:assembleRelease 目录是这样的: MyApp/ ├── app/ …...

C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
【HarmonyOS 5】鸿蒙中Stage模型与FA模型详解
一、前言 在HarmonyOS 5的应用开发模型中,featureAbility是旧版FA模型(Feature Ability)的用法,Stage模型已采用全新的应用架构,推荐使用组件化的上下文获取方式,而非依赖featureAbility。 FA大概是API7之…...

ArcGIS Pro+ArcGIS给你的地图加上北回归线!
今天来看ArcGIS Pro和ArcGIS中如何给制作的中国地图或者其他大范围地图加上北回归线。 我们将在ArcGIS Pro和ArcGIS中一同介绍。 1 ArcGIS Pro中设置北回归线 1、在ArcGIS Pro中初步设置好经纬格网等,设置经线、纬线都以10间隔显示。 2、需要插入背会归线…...
Easy Excel
Easy Excel 一、依赖引入二、基本使用1. 定义实体类(导入/导出共用)2. 写 Excel3. 读 Excel 三、常用注解说明(完整列表)四、进阶:自定义转换器(Converter) 其它自定义转换器没生效 Easy Excel在…...