GPT每日面试题-Typescript中type和interface的区别

充分利用ChatGPT的优势,帮助我们快速准备前端面试。今日问题:typescript中type和interface的区别?

Q:如果在前端面试中,被问到typescript的type和interface的区别是什么,怎么回答最好?

A:当谈论TypeScript中的type和interface时,可以更加详细地探讨它们的特点、用法和适用场景。以下是一份更详细的解释:

Type(类型别名):

  • 定义方式: 使用关键字type,可以给已有类型或复杂类型创建别名。
type MyString = string;
type Point = { x: number, y: number };
type Callback = (result: string) => void;
  • 特点

    • Type可以是简单类型(如基本类型、联合类型、字面量类型等)也可以是复杂类型(如对象类型、函数类型等)。
    • 可以使用交叉类型、联合类型等进行组合,使得类型定义更加灵活。
    • 可以使用类型操作符进行进一步的处理,如Partial、Required、Pick等。
  • 应用场景

    • 适合创建复杂的类型别名,使得代码更易读,减少重复代码。
    • 用于定义联合类型、交叉类型、函数类型等高级类型。
    • 可以用于编写通用的类型工具库。
  • 扩展性

    • Type可以通过简单的赋值或使用交叉类型进行扩展。
    • 可以通过交叉类型(&)将多个类型组合成一个新的类型。
    • 也可以使用类型别名进行简单的类型扩展。
type A = { x: number };
type B = { y: number };
type C = A & B; // C = { x: number, y: number }
type D = C & {z: number;
};
  • 可合并性
    • Type 是可以合并的,这意味着你可以声明相同名称的多个 Type,它们会自动合并成一个类型。例如:
type Name = { firstName: string };
type Name = { lastName: string };
// 这会自动合并成一个类型: { firstName: string, lastName: string }

Interface(接口):

  • 定义方式:使用关键字interface,用于描述对象的结构。
interface Person {name: string;age: number;greet(): void;
}
  • 特点

    • Interface主要用于描述对象的形状,包括属性和方法,不支持基本类型别名。
    • 可以用extends关键字继承其他接口,实现接口的复用。
    • 支持声明合并,可以将多个同名的接口合并成一个。
  • 应用场景

    • 适合描述对象的结构,使得代码更加清晰易读,便于维护和理解。
    • 可以用于定义类的契约,明确类的属性和方法。
    • 用于声明第三方库的类型定义或进行类型声明文件编写。
  • 扩展性

    • Interface可以通过使用extends关键字进行继承。
    • 接口之间可以进行单继承,子接口会继承父接口的所有成员。
    • 一个接口可以继承多个其他接口。
interface A { x: number; }
interface B { y: number; }
interface C extends A, B { z: number; }
  • 可合并性
    • Interface 是不可合并的,如果你声明相同名称的多个 Interface,它们会被视为冲突而导致编译错误。

Type vs Interface:

  • 灵活性: Type相对更灵活,适用于创建复杂类型别名和高级类型;而Interface更专注于对象结构的描述,不支持创建简单类型别名。
  • 扩展性: Type可以通过联合、交叉等方式进行扩展,非常灵活;而Interface只能通过extends关键字继承其他接口,限制了其扩展的方式。
  • 应用场景: 根据具体需求选择使用,Type适合创建复杂类型别名和高级类型,Interface适合描述对象结构和类的契约。

通常来说,如果你需要扩展或实现一个接口,或者用于描述对象的形状,那么使用 Interface 更合适;如果你需要更灵活地定义类型,或者需要使用联合类型、交叉类型等高级类型特性,那么使用 Type 更为合适。

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

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

相关文章

关于下载上传的sheetjs

一、背景 需要讲后端返回来的表格数据通过前端设置导出其中某些字段,而且得是xlsx格式的。 那就考虑使用控件SheetJS。如果是几年前,一般来说,保存excel的文件都是后端去处理,处理完成给前端一个接口,前端调用了打开…

『大模型笔记』Meta 宣布推出 Llama 3 的介绍视频

Meta 宣布推出 Llama 3 的介绍视频 文章目录 一. Meta 宣布推出 Llama 3 的介绍视频一、引言二、Llama 模型历史回顾三、Llama 3 模型介绍四、Llama 3 背后的开发思路五、许可证和生态系统六、安全和信任七、其他亮点八、未来计划九、现场演示四. 参考文献一. Meta 宣布推出 Ll…

Centos7+Hadoop3.3.4+KDC1.15+Ranger2.4.0集成

一、集群规划 本次测试采用3台虚拟机,操作系统版本为centos7.6。 kerberos采用默认YUM源安装,版本为:1.15.1-55 Ranger版本为2.4.0 系统用户为ranger:ranger IP地址主机名KDCRanger192.168.121.101node101.cc.localKDC masterRanger Admin…

【云原生】Docker 实践(四):使用 Dockerfile 文件的综合案例

Docker 实践(四):使用 Dockerfile 文件的综合案例 下面将从一个 CentOS 的基础镜像开始,安装 JDK 和 Tomcat 环境,并完成一个 Web 应用的部署。整个过程通过一个 Dockerfile 文件来描述。通过 Dockerfile 文件来构建一…

快速了解Linux IPC

目录 一、IPC简介 二、管道和FIFO 三、信号 四、消息队列 五、信号量 六、共享内存 七、嵌套字(Socket) 一、IPC简介 进程间通信(interprocess communication,简称IPC)指两个进程之间的通信。 系统中的每一个进…

Threejs制作服务器机房冷却结构

这节再绘制一个机房的结构,因为内容比较简单,就只使用一个章节来介绍, 先来一张效果图, 需要两个模型:一个冷却设备,一个服务器机箱,我这里是从网上找来的,首先我们搭建一个场景&a…

Java数组查找

数组查找 1.线性查找&#xff08;遍历查询&#xff09;2.二分查询算法步骤注意事项Java 代码示例时间复杂度 1.线性查找&#xff08;遍历查询&#xff09; 就是完全遍历数组&#xff0c;寻找要找的元素 int [] arr {10,6,8,9,2,3,};int num 8;for(int i 0;i<arr.length-1…

搭建大型分布式服务(三十七)SpringBoot 整合多个kafka数据源-取消限定符

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

Matlab生成txt文件导入到Vivado仿真

Matlab处理数据并将其写入txt文件 %% Txt Generate pre_RS_datadec2bin(simDataIn,8); %将数据转化为8bit的二进制 fidfopen("F:\FPGA\Xilinx_vivado\project\dvbstestbench\dbvs\matlab\pre_RS_data.txt","wt"); for i1:n*nMessages %数据…

【笔试题汇总】华为春招笔试题题解 2024-4-24

这里是paoxiaomo&#xff0c;一个现役ACMer&#xff0c;之后将会持续更新算法笔记系列以及笔试题题解系列 本文章面向想打ICPC/蓝桥杯/天梯赛等程序设计竞赛&#xff0c;以及各个大厂笔试的选手 感谢大家的订阅➕ 和 喜欢&#x1f497; 有什么想看的算法专题可以私信博主 &…

Docker Registry私有仓库详解

引言 在Docker生态系统中&#xff0c;容器镜像的管理至关重要。Docker公共仓库&#xff08;如Docker Hub&#xff09;为开发者提供了便捷的镜像托管服务&#xff0c;但出于安全、隐私及网络性能的考虑&#xff0c;许多企业和组织更倾向于搭建自己的Docker私有仓库。本文将详细探…

Ubuntu C++ man手册安装及使用

Ubuntu下C++ man手册安装 C++在线文档: http://www.cplusplus.com/reference/ 第一种办法:使用cppman $ sudo apt install cppman 使用方法 第二种办法: 打开网页:GCC mirror sites- GNU Project 点击下图中的突显行链接: Russia, Novosibirsk:

Spring:SpringBoot项目中忽略某属性返回给前端

文章目录 一、忽略实体类中的属性1、JsonIgnore2、JSONField(serialize false)3、JsonInclude 二、忽略实体类中的方法返回值 一、忽略实体类中的属性 1、JsonIgnore JsonIgnore注解是Jackson库中的一个注解&#xff0c;用于在实体类向前台返回数据时忽略不想传递给前台的属…

使用UmcFramework和unimrcpclient.xml连接多个SIP设置的配置指南及C代码示例

使用UmcFramework和unimrcpclient.xml连接多个SIP设置的配置指南及C代码示例 引言1. UniMRCP和UmcFramework简介2. 准备工作3. unimrcpclient.xml配置文件3.1 定义SIP设置3.2 定义MRCP会话配置文件 4. C代码示例5. 测试和验证6. 故障排查7. 结论8. 参考文献 引言 在多媒体通信…

小剧场短剧影视小程序源码_后端PHP

项目运行截图 源码贡献 https://githubs.xyz/boot?app42 部署说明 linux/win任选 PHP版本&#xff1a;7.3/7.2&#xff08;测试时我用的7.2要安装sg扩展 &#xff09; 批量替换域名http://video.owoii.com更换为你的 批量替换域名http://120.79.77.163:1更换为你的 这两个…

微服务之SpringCloud AlibabaSeata处理分布式事务

一、概述 1.1背景 一次业务操作需要跨多个数据源或需要跨多个系统进行远程调用&#xff0c;就会产生分布式事务问题 but 关系型数据库提供的能力是基于单机事务的&#xff0c;一旦遇到分布式事务场景&#xff0c;就需要通过更多其他技术手段来解决问题。 全局事务&#xff1a;…

蓝桥杯单片机之模块代码《秒表》

文章目录 定时器/计数器1.工作原理2.总代码 省赛代码传送门 定时器/计数器 1.工作原理 定时器/计数器是一种能够对内部时钟信号或者外部输入信号进行计数&#xff0c;当计数值达到设定要求时&#xff0c;向CPU提出中断请求&#xff0c;从而实现定时或计数功能的外设。定时器的…

使用 Lua 协程模拟 Golang 的 go defer 编程模式

封装 go 函数 在 使用 Lua 协程处理异步回调函数 中已经介绍 这里简要列下&#xff1a; 封装 go 函数---go 函数创建并启动一个协程 ---param _co_task function 函数原型 fun(_co:thread) function go(_co_task)local co coroutine.create(_co_task) -- 创建的协程是暂停的…

【论文阅读】ChipNeMo中的数据集处理

前面总体学习了《ChipNeMo: Domain-Adapted LLMs for Chip Design》&#xff0c;然后又继续仔细看了论文中的领域适配分词和领域数据微调的预训练检索模型&#xff0c;对于数据集的处理&#xff0c;也需要仔细看一下。 提炼重点&#xff1a;1&#xff09;对于数据集&#xff0…

Golang中的Json标签(持续更新...)

目录 字段标签对应表 字段标签对应表 在Go语言中&#xff0c;结构体&#xff08;struct&#xff09;的字段标签&#xff08;Field Tags&#xff09;通常用于为字段提供额外的元数据&#xff0c;这些元数据可以由反射&#xff08;reflect 包&#xff09;或其他库&#xff08;如…