TypeScript 基础学习笔记:interface 与 type 的异同

在这里插入图片描述

🔥 个人主页:空白诗

在这里插入图片描述

文章目录

  • TypeScript 学习笔记:`interface` 与 `type` 的异同
    • 🎣 引言
    • 🚀 快速入门
      • 1️⃣ Interface(接口)
        • 📋 定义
        • 🤝 实现
        • 💡 特点
      • 2️⃣ Type Aliases(类型别名)
        • 📜 定义
        • 🎯 应用
        • 🧠 特点
    • 📊 `interface` 与 `type` 的区别
    • 🌟 实践建议
    • 🚀 总结

在这里插入图片描述


TypeScript 学习笔记:interfacetype 的异同

🎣 引言

TypeScript的世界里,精准的类型定义是保证代码质量与团队协作效率的关键。interfacetype 作为两种核心的类型定义工具,它们各自承载着不同的设计意图与应用场景。本文旨在清晰阐述两者的基本概念、应用场景及核心差异,帮助开发者在实际编码过程中做出更为合适的选择,进一步提升代码的健壮性和可维护性。

🚀 快速入门

TypeScript 中,类型系统是为了增强 JavaScript类型安全interfacetype 都是创建自定义类型的手段,但它们各自有着独特的应用场景和特点。

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,适合非面向对象的场景。

📊 interfacetype 的区别

  • 扩展性interface 支持后续扩展,而 type 不支持。
  • 用途interface 适用于定义对象形状,尤其是面向对象设计;type 更通用,适用于各种类型定义,包括但不限于对象类型。
  • 语法差异interface 可以直接定义方法签名,而 type 定义对象类型时需使用对象字面量形式。

🌟 实践建议

  • 对于需要描述对象结构或实现多态的场景,优先考虑使用 interface
  • 当需要定义复杂的类型组合或函数类型时,使用 type 可能更加简洁和灵活。
  • 根据具体需求和团队编码规范来决定使用哪个,两者并非互斥,经常需要配合使用以达到最佳效果。

🚀 总结

综上所述,interfacetype 都是TypeScript中实现类型安全的重要机制,它们各有千秋,服务于不同的场景需求。

interface凭借其开放性和面向对象的特性,非常适合用于定义和扩展对象结构及类的契约;而type则以其灵活性和多样性,在处理联合类型、元组类型及更复杂的类型定义时展现出独特优势。

开发者应当根据具体的项目需求和代码风格,合理选择使用interfacetype,或是两者结合,以达到最优的类型系统设计。理解它们之间的差异与联系,是每位TypeScript开发者技能提升的重要一环。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/834243.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android 高版本实现沉浸式状态栏

目前实现的android高版本沉浸式状态栏分为两类: 1、是纯透明状态栏; 2、是纯透明状态栏,但是状态栏字体是黑色; 将状态栏的代码封装到BaseActivity中更方便使用: BaseActivity: public abstract class BaseActivit…

如何在Linux中安装Docker Compose

下载安装 在Linux中安装Docker Compose相对简单,你可以按照以下步骤进行 确保Docker已经安装   Docker Compose需要在系统上安装了Docker才能正常工作。如果你的系统上还没有安装Docker,请先安装Docker。 下载Docker Compose   你可以从Docker官方Gi…

记录HCIP学习过程中的疑问

1、查看协议路由表、本地核心路由表、FIB表的命令??? 查看FIB表:display fib [ slot-id ] 2、最优路由选择,当达到目的地址的路由有多条时,本地核心路由 与FIB表的情况??&#xf…

代码随想录算法训练营第四十四天

sad的一天&#xff0c;明天开始上班&#xff0c;而且娃还行&#xff0c;媳妇儿状态不稳定&#xff0c;太难了也&#xff01;&#xff01;&#xff01; 完全背包 #include<vector> #include<iostream> using namespace::std; int main(){int N;//种类int V;//空间ci…

AI一键换装超强电商生产力工具下载

支持win版本&#xff0c;对电脑硬件有一定的要求。建议固态硬盘留足至少30 G的空间&#xff0c;显卡n卡显存至少4G。一些低端独立显卡可能还不如高配cpu集成。 程序文件比较大&#xff0c;因为涉及到大型模型。 下载链接在后面 下载链接&#xff1a; https://pan.baidu.com…

【Linux】如何定位客户端程序的问题

文章目录 1 客户端程序和服务端程序的差别2 问题类型2.1 崩溃(crash)2.2 CPU高2.3 内存高2.4 线程卡死 3 总结 1 客户端程序和服务端程序的差别 客户端程序是运行在终端上&#xff0c;通常都会与业务系统共存&#xff0c;而服务端程序通常会运行在单独的节点上&#xff0c;或者…

怎麼檢測線上代理IP是否生效?

代理IP在保護網路隱私、繞過地理限制、提高網路安全等方面發揮著重要的作用。使用代理IP時&#xff0c;經常會涉及到一個問題&#xff1a;如何確定代理IP是否生效&#xff1f;在這篇文章中&#xff0c;我們將詳細討論幾種檢測線上代理IP是否生效的方法。 一、使用線上代理檢測…

Shell编程之条件语句与case语句

目录 1.条件测试 1.1 文件测试 1.2 整数测试 1.3 字符串测试 1.4 逻辑测试 2.if语句 2.1 单分支if语句 2.2 双分支if语句 2.3 多分支if语句 3.case分支语句 1.条件测试 test命令 Shell环境根据命令执行后的返回状态值&#xff08;$?&#xff09;来判断是否执行成功…

找最大数字-第12届蓝桥杯国赛Python真题解析

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第60讲。 找最大数字&#…

你会拧螺丝吗?来看看如何拧紧螺丝?——SunTorque智能扭矩系统

智能扭矩系统-智能拧紧系统-扭矩自动控制系统-SunTorque 螺丝拧紧看似简单&#xff0c;却是一门需要技巧和耐心的技术活。很多人可能会认为&#xff0c;只要把螺丝旋进孔里&#xff0c;用力拧紧就可以了。但实际上&#xff0c;拧紧螺丝的过程远不止如此。在这篇文章中&#xf…

FPGA+DDR+SERDES+USB3.0单向传输机方案,数据只能单向传输,避免反向攻击,确保系统安全

FPGADDRSERDESUSB3.0方案&#xff0c;设备包含发送端接收端&#xff0c;物料上采用光纤通讯&#xff0c;数据只能单向传输&#xff0c;避免反向攻击&#xff0c;确保系统安全 客户应用:高安全、高可靠性要求的场景 主要性能: 1.支持USB3.0传输&#xff0c;实测可达到350MB/s 2.…

c#设置或者获取一个泛型整数指定bit的值

1.设置 代码如下&#xff08;示例&#xff09;&#xff1a; /// <summary>/// 设置一个整形数的每一个bit的值/// </summary>/// <typeparam name"T"></typeparam>/// <param name"flag">bit位0或者1</param>/// <…

做安卓应用开发的我,转前端开发了

距离转前端开发已经快3个月了&#xff0c;现在自己也慢慢的熟悉了开发。 在2月份的时候。领导找我们移动小组的谈话&#xff0c;主要是关于转前端或者后端的问题。由于公司移动端的选型&#xff0c;对安卓原生的需求降低&#xff0c;问下我们转其他开发的需求。 我毫不犹豫的选…

【C++】滑动窗口:最大连续1的个数

1.题目 2.算法思路 其实在做这道题的时候并不需要真的把0翻转成1&#xff0c;只需要找到最长的子数组且该子数组中0的个数不大于K&#xff0c;就可以了&#xff01; 当然我们首先想到的是暴力穷举法&#xff1a; 找到所有符合题意的子数组&#xff0c;跳出最长的那个就可以了…

Python中的异常处理:深入探索try-except-finally结构

Python中的异常处理&#xff1a;深入探索try-except-finally结构 一、引言 在Python编程中&#xff0c;异常处理是一个非常重要的部分。当程序遇到错误时&#xff0c;比如尝试除以零、文件读取失败等&#xff0c;Python会抛出一个异常。如果我们不捕获这些异常&#xff0c;程…

Spring AI实战之一:快速体验(OpenAI)

欢迎访问我的GitHub 这里分类和汇总了欣宸的全部原创(含配套源码)&#xff1a;https://github.com/zq2599/blog_demos 关于Spring AI Spring Boot、Spring Cloud、Spring Data&#xff0c;作为一名Java程序员&#xff0c;相信您对这些概览早已耳熟能详&#xff0c;或者天天在用…

Django中如何让页面之间建立关系

今天给大家讲解两种让页面建立联系的方式 一、重定向 二、表单提交 先看第一种方式&#xff0c;重定向 首先需要了解客户端发起请求的过程 1、客户端向服务端发起请求,比如请求地址是&#xff1a;http://127.0.0.1:8000/lili/submit/ 2、程序根据路由找到视图函数 3、执行视…

Dapper的快速使用

Dapper是.NET下一个轻量级的ORM框架,它和Entity Framework或Nhibnate不同,属于轻量级的,并且是半自动的。也就是说实体类都要自己写。它没有复杂的配置文件,一个单文件就可以了。Dapper通过扩展IDbConnection提供一些有用的扩展方法去查询您的数据库。 可以分为三个步骤:…

c++ 刷题代码加速

代码 #define __SANITIZE_ADDRESS__ 0 #pragma comment(linker, "/stack:200000000") #pragma GCC optimize("Ofast,no-stack-protector") #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tunenative") #pragma GCC optimiz…

sqlserver中替换空格和换行

sqlserver 中换行符&#xff0c;如下&#xff1a; sql语句如下&#xff08;只是在window系统中&#xff09;&#xff1a; //替换换行-使用char(10)或者char(13) select REPLACE(F_CNKITitle ,char(10),) title from tzkj_CNKIContent tc where --F_CnkiContentID ffdc7412-41…