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.mfbz.cn/a/586954.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux搭建靶场

提前准备: 文章中所使用到的Linux系统:Ubantu20.4sqlilabs靶场下载地址:GitHub - Audi-1/sqli-labs: SQLI labs to test error based, Blind boolean based, Time based. 一. 安装phpstudy phpstudy安装命令:wget -O install.sh h…

Map和Set基础

目录 一、导论 二、Map 三、Set 本文找先不涉及两种数据结构的底层,目标是: 理解Map和Set的大体框架,了解他们有什么用,用在哪里的,然后再从浅层深入底层。 小编认为: 先了解也下Map和Set大体是用来做…

Mysql--创建数据库

一、创建一个数据库 “db_classes” mysql> create database db_classes; mysql> show databases; -------------------- | Database | -------------------- | db_classes | | information_schema | | mysql | | performance_schema | |…

开通Jetbrains个人账号,赠送这些付费插件

开通Jetbrains个人账号,或者Jetbrains现成账号的, 可赠送以下付费插件 现成账号:https://web.52shizhan.cn/activity/xqt8ly 个人账号:https://web.52shizhan.cn/legal 账号支持全家桶系列:AppCode,CLion,DataGrip,GoLand,Intell…

Codeforces Round 941 (Div. 2) (A~D)

1966A - Card Exchange 题意&#xff1a; 思路&#xff1a;手玩一下发现当存在某个数字个数超过k个&#xff0c;那么就能一直操作下去。那么答案就是k-1. void solve() {cin >> n >> m;map<int,int>mp;int maxx 1;for(int i 0 ; i < n ; i ){int x;c…

手把手教数据结构与算法:优先级队列(银行排队问题)

队列 基本概念 队列的定义 队列&#xff08;Queue&#xff09;&#xff1a;队列是一种常见的数据结构&#xff0c;遵循先进先出&#xff08;First-In-First-Out, FIFO&#xff09;的原则。在队列中&#xff0c;元素按照进入队列的顺序排列。队列是一个线性的数据结构&#x…

深入解析yolov5,为什么算法都是基于yolov5做改进的?(一)

YOLOv5简介 YOLOv5是一种单阶段目标检测算法&#xff0c;它在YOLOv4的基础上引入了多项改进&#xff0c;显著提升了检测的速度和精度。YOLOv5的设计哲学是简洁高效&#xff0c;它有四个版本&#xff1a;YOLOv5s、YOLOv5m、YOLOv5l、YOLOv5x&#xff0c;分别对应不同的模型大小…

深度学习从入门到精通——词向量介绍及应用

词向量介绍 词向量&#xff08;Word embedding&#xff09;&#xff0c;即把词语表示成实数向量。“好”的词向量能体现词语直接的相近关系。词向量已经被证明可以提高NLP任务的性能&#xff0c;例如语法分析和情感分析。词向量与词嵌入技术的提出是为了解决onehot的缺陷。它把…

pytorch中创建maskrcnn模型

0.模型输入/输出参数参见 链接: pytorch的mask-rcnn的模型参数解释 核心代码 GeneralizedRCNN(这里以mask-rcnn来解释说明) # 通过输入图像获取fpn特征图,注意这里的backbone不是直接的resnet,而是fpn化后的 features self.backbone(images.tensors) # 由于是mask-rcnn,故而…

如何快速搭建nginx服务

华子目录 nginx简介概念特点nginx框架nginx关键工作机制 nginx正向代理功能nginx反向代理功能nginx反向代理的工作流程代理本质 nginx负载均衡部署nginx常用命令systemctl系列nginx自带命令 nginx配置文件主配置文件/etc/nginx/nginx.conf内容结构模块分析配置分析注意示例 ngi…

Android创建快捷方式到桌面

效果图 参考 https://blog.51cto.com/u_16175498/8811197https://blog.51cto.com/u_16175498/8811197 权限 <uses-permission android:name"com.android.launcher.permission.INSTALL_SHORTCUT" /> 实现 if (Build.VERSION.SDK_INT > Build.VERSION_C…

【已解决】Python Selenium chromedriver Pycharm闪退的问题

概要 根据不同的业务场景需求&#xff0c;有时我们难免会使用程序来打开浏览器进行访问。本文在pycharm中使用selenium打开chromedriver出现闪退问题&#xff0c;根据不断尝试&#xff0c;最终找到的问题根本是版本问题。 代码如下 # (1) 导入selenium from selenium import …

C++ stack、queue以及deque

1、stack和queue常用接口 严格来说栈和队列的实现是容器适配器 1、常用接口&#xff1a; 栈&#xff1a;top、push、pop、size、emptystack - C Reference (cplusplus.com) 队列&#xff1a;top、push、pop、swap、size、emptyqueue - C Reference (cplusplus.com) 2、deque&a…

Android手势识别面试问题及回答

问题 1: 如何在Android中实现基本的手势识别&#xff1f; 答案: 在Android中&#xff0c;可以通过使用GestureDetector类来实现基本的手势识别。首先需要创建一个GestureDetector的实例&#xff0c;并实现GestureDetector.OnGestureListener接口来响应各种手势事件&#xff0c…

ubuntu安装mysql时候修改root密码

前情&#xff1a; 使用set password for rootlocalhost ‘passwd’&#xff1b; set password for ‘root’‘localhost’‘passwd’&#xff1b; update user set passwordpassword(‘passwd’) where user‘root’ and host ‘localhost’; flush privileges; 以上方法均报…

定制开发AI智能名片商城小程序:玩转积分制度的成功案例

在数字化浪潮席卷而来的今天&#xff0c;企业营销方式不断创新&#xff0c;力求在众多竞争对手中脱颖而出。其中&#xff0c;积分制度以其直观、有效的特点&#xff0c;成为了众多企业的营销利器。某时尚品牌“潮流前线”便是其中的佼佼者。他们通过定制一款AI智能名片商城小程…

德国著名自动化公司Festo设计了一款仿生蜜蜂,仅重34g,支持多只蜜蜂编队飞行!...

德国著名的气动元件研发及自动化解决方案供应商Festo公司近日展示了一款仿生蜜蜂&#xff08;BionicBee&#xff09;&#xff0c;重量只有34g&#xff0c;却完全可以实现自主飞行&#xff0c;还支持多只相同的蜜蜂机器人编队飞行。 BionicBee 重约 34 克&#xff0c;长 22 厘米…

二叉树的前序,中序,后序遍历

二叉树可以分为左子树&#xff0c;右子树和根节点。同时左子树和右子树又可以分为新的左子树和右子树加上新的根节点&#xff0c;以此类推。 二叉树的前序&#xff0c;中序&#xff0c;后序遍历也叫前根遍历&#xff0c;中根遍历&#xff0c;后根遍历或者前序遍历&#xff0c;…

【Vue 2.x】学习vue之三路由

文章目录 Vue三路由第十章1、vue中的路由vue的应用分为a、多页面应用b、单页面应用 2、路由的基本应用1、基础2、使用3、加载 3、vue组件的分类1、普通组件2、路由组件 4、路由的嵌套5、路由传递Query参数1、拼接参数传递2、路由传递对象 6、简化路由1、命名路由 7、parms传递参…

控制台主机不能运行,切换终端实现RPG运行

鄙人转载&#xff0c;主要是移植过程中使用小熊猫C2.25.1 过程中&#xff0c;字符集不同&#xff0c;导致某些空格 从bilibili专栏粘贴导致出现符号不匹配&#xff0c;但是编辑器不能替换 用原来的devc 5.11 发现问题&#xff0c;读出额外的英文&#xff1f; 使用文件替换&…
最新文章