如果你有写过 Vue3 的项目,那么对 TypeScript 肯定不会陌生。不管是公司新项目技术选型还是个人学习开发新的前端项目,Vue3 + TypeScript 已经成为首选技术方案之一

在 TypeScript 这个强大的静态类型系统中,type 和 interface 是两个重要的关键字,用于定义和描述数据类型。然而,这两者之间的区别是什么,在实际开发过程中我们要怎么用呢?废话不说,直接进入正题,就让我们一起深入探讨吧

一、type 和 interface 的定义

  • type: 可以定义一个集合,可以包含各种类型的属性和值,以用来描述对象、函数、联合类型、交叉类型等
type Person = {
name: string;
age: number;
sex: 0 | 1;
};
  • interface:它定义了一个对象的形状,描述了对象应该具有的属性及其类型
interface Person {
name: string;
age: number;
sex: 0 | 1;
}

通过上面的示例,我们可以看到,虽然type 和interface都可以用来描述对象的结构,但是它们的语法略有不同。type 使用等号来定义类型别名,而 interface 使用花括号直接定义接口的成员

二、type 和 interface 的可扩展性

  • type:它可以通过联合类型(|)和交叉类型(&)进行组合,但不能直接扩展其他 type
type A = { x: string };
type B = { y: string };
type C = A & B; // C 同时具有 A 和 B 的属性
  • interface:它可以被扩展,可以使用 extends 关键字来实现接口的继承,从而添加更多属性或者方法
interface Fruit {
name: string;
} interface Apple extends Fruit {
kind: string;
}

综合例子来看,type 适合于定义复杂的类型别名和泛型类型,以及进行条件类型的定义。interface 也具有相似的能力,它适合于描述对象的形状,定义类的契约和实现,以及接口之间的继承和扩展。这两者在许多情况下可以互相替代

三、type 和 interface 的兼容性

  • type:如果对类型别名进行重复定义,TypeScript 会报错。这意味着不能重新定义一个已存在的type
type A = { x: string };
type A = { y: string }; // 错误: 重复定义
  • interface:如果定义了多个同名的接口,它们会被合并成一个单一的接口,而不是报错。当多个同名接口出现时,它们的成员会被合并为一个接口,这种合并会在类型级别上进行,不会在运行时产生影响
interface A {
x: string;
}
interface A {
y: string;
z: string;
}

就拿这个例子来说,无论你使用哪个interface A,都会引用同一个合并后的接口定义。这样的合并机制使得 TypeScript 中的接口能够更加灵活地进行组织和管理

结语

typeinterface 在 TypeScript 中都是用来定义类型的关键字,它们各有优势和适用场景。了解它们之间的区别和特性,可以更好地利用 TypeScript 的类型系统来提高代码质量和开发效率

在日常开发工作中,我们要遵循团队规范。例如,可以用interface定义一个复杂的对象类型,在组合不同类型时,可以使用 type关键字来定义

TypeScript 中的 type 和 interface:你真的了解它们的不同吗?的更多相关文章

  1. 【区分】Typescript 中 interface 和 type

    在接触 ts 相关代码的过程中,总能看到 interface 和 type 的身影.只记得,曾经遇到 type 时不懂查阅过,记得他们很像,相同的功能用哪一个都可以实现.但最近总看到他们,就想深入的了 ...

  2. TypeScript 中的方法重载

    方法重载(overload)在传统的静态类型语言中是很常见的.JavaScript 作为动态语言, 是没有重载这一说的.一是它的参数没有类型的区分,二是对参数个数也没有检查.虽然语言层面无法自动进行重 ...

  3. 十分钟教你理解TypeScript中的泛型

    转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者.原文出处:https://blog.bitsrc.io/understanding-generics-in-t ...

  4. 探索typescript的必经之路-----接口(interface)

    TypeScript定义接口 熟悉编程语言的同学都知道,接口(interface)的重要性不言而喻. 很多内容都会运用到接口.typescrip中的接口类似于java,同时还增加了更灵活的接口类型,包 ...

  5. TypeScript中的private、protected

    首先我们要清楚 private . protected 现阶段只是javascript中的保留字(Reserved words),而非关键字(Keywords ).因此TypeScript中的纯类型声 ...

  6. typescript 中的 infer 关键字的理解

    infer 这个关键字,整理记录一下,避免后面忘记了.有点难以理解呢. infer infer 是在 typescript 2.8中新增的关键字. infer 可以在 extends 条件类型的字句中 ...

  7. TypeScript 中命名空间与模块的理解?区别?

    一.模块 TypeScript 与ECMAScript 2015 一样,任何包含顶级 import 或者 export 的文件都被当成一个模块 相反地,如果一个文件不带有顶级的import或者expo ...

  8. 5种在TypeScript中使用的类型保护

    摘要:在本文中,回顾了TypeScript中几个最有用的类型保护,并通过几个例子来了解它们的实际应用. 本文分享自华为云社区<如何在TypeScript中使用类型保护>,作者:Ocean2 ...

  9. TypeScript中的怪语法

    TypeScript中的怪语法 如何处理undefined 和 null undefined的含义是:一个变量没有初始化. null的含义是:一个变量的值是空. undefined 和 null 的最 ...

  10. JavaScript 和 TypeScript 中的 class

    对于一个前端开发者来说,很少用到 class ,因为在 JavaScript 中更多的是 函数式 编程,抬手就是一个 function,几乎不见 class 或 new 的踪影.所以 设计模式 也是大 ...

随机推荐

  1. VLM-OCR-Demo:一个使用VLM用于OCR任务的示例

    前言 上一篇文章TesseractOCR-GUI:基于WPF/C#构建TesseractOCR简单易用的用户界面中我们构建了一个方便使用TesseractOCR的用户界面,今天构建一个类似的界面,使用 ...

  2. 数据万象AVIF图片压缩 - 小程序省流量利器

    导语 微信小程序因其便捷的开发环境和天然的微信生态,使得越来越多企业平台通过小程序建立自己的业务.在小程序上使用图片非常广泛,但传统格式图片(如 JPG/PNG)占用空间大,加载速度慢,可能导致昂贵的 ...

  3. Windows下,terminal美化、命令行美化

    1. Terminal terminal 比 原生的 cmd 要更加好用 直接去 Micorosoft Store 下载就行了 2. 美化效果图 3. 美化步骤 3.1 需要的插件 git-alias ...

  4. 优化大宽表查询性能,揭秘GaussDB(DWS) 谓词列analyze

    本文分享自华为云社区<GaussDB(DWS) 谓词列analyze揭秘>,作者:SmithCoder. 1. 前言 适用版本:[9.1.0.100(及以上)] ​当前GaussDB(DW ...

  5. Qt采集本地摄像头推流成rtsp/rtmp(可网页播放/支持嵌入式linux)

    一.功能特点 支持各种本地视频文件和网络视频文件. 支持各种网络视频流,网络摄像头,协议包括rtsp.rtmp.http. 支持将本地摄像头设备推流,可指定分辨率和帧率等. 支持将本地桌面推流,可指定 ...

  6. Qt音视频开发26-监控画面各种图形绘制设计

    一.前言 视频监控系统做到后面,逐渐需要搭配人工智能算法,将算法计算后的信息以OSD标签以及方框各种图形的信息显示到视频中,这种当然和OSD一样也是有两种方式,一种是源头就贴好了,一种是将结果发给软件 ...

  7. Qt编写地图综合应用45-路径规划

    一.前言 路径规划一般是根据起始点坐标经纬度和结束点坐标经纬度,查询出合适的路线.关于起始坐标和结束坐标,最开始做的是直接传入具体中文地址即可,后面百度地图不再开放此功能,貌似变成了收费功能,但是经纬 ...

  8. Qt编写地图综合应用37-覆盖物多边形

    一.前言 多边形主要的应用场景是用来框起一块区域,然后根据坐标点集合,找到该区域内的标注点集合,比如指定某个县市区域多边形,然后找到这个县市对应的所有站点,拿到这些站点在做其他处理. 二.功能特点 同 ...

  9. Qt开源作品24-遮罩层窗体

    一.前言 在有些项目中,需要在弹框的窗体背后遮罩原有主窗体,使得突出显示弹窗窗体,突然想到之前写过一个全局截屏的东东,原理一致,拿来改改.只需要引入一个头文件和实现文件,然后在主窗体中设置下需要遮罩的 ...

  10. IM开发者的零基础通信技术入门(十三):为什么手机信号差?一文即懂!

    [来源申明]本文引用了微信公众号"网优雇佣军"的<是谁偷走了我家的手机信号?>文章内容.为了更好的内容呈现,下文在引用和收录时内容有改动,转载时请注明原文来源信息,尊重 ...