当前位置:首页 > 科技  > 软件

请停止使用 TypeScript 接口

来源: 责编: 时间:2024-05-11 09:18:40 273观看
导读为什么应该使用类型而不是接口这张图片是由人工智能生成的。类型和接口 是每个 TypeScript 程序中使用的重要特性。然而,由于类型和接口在功能上非常相似,这就引出了一个问题:哪个更好?今天,我们将评估类型和接口,然后得出

为什么应该使用类型而不是接口

UjL28资讯网——每日最新资讯28at.com

这张图片是由人工智能生成的。UjL28资讯网——每日最新资讯28at.com

类型和接口 是每个 TypeScript 程序中使用的重要特性。UjL28资讯网——每日最新资讯28at.com

然而,由于类型和接口在功能上非常相似,这就引出了一个问题:哪个更好?UjL28资讯网——每日最新资讯28at.com

今天,我们将评估类型和接口,然后得出结论,说明为什么你在大多数情况下应该使用类型而不是接口。UjL28资讯网——每日最新资讯28at.com

所以,不多说了……让我们马上开始吧。UjL28资讯网——每日最新资讯28at.com

那么它们有什么区别呢?

让我们分析一下这个 Person 类型 和 接口 的定义:UjL28资讯网——每日最新资讯28at.com

type Person = {  name: string  age: number}interface Person {  name: string  age: number}

很明显,类型和接口有相似的语法,关键区别在于类型使用 = 来定义对象的形状,而不是接口。UjL28资讯网——每日最新资讯28at.com

然而,事情远不止于此。UjL28资讯网——每日最新资讯28at.com

让我们深入挖掘一下,一起探索和评估类型和接口。UjL28资讯网——每日最新资讯28at.com

可扩展性

就可扩展性而言,许多人认为接口是显而易见的赢家,因为接口可以使用 extends 扩展其他接口。UjL28资讯网——每日最新资讯28at.com

// 可扩展性示例interface Job {  job: string}interface Person extends Job {  name: string  age: number}// 使用了 Person 和 Job 的属性。const person: Person = {  name: "John",  age: 25,  job: "全栈 Web 开发者",}

在这里,Person 接口扩展了 Job,因此 Job 接口的属性合并到了 Person 中。UjL28资讯网——每日最新资讯28at.com

另一方面,类型也通过利用 联合 | 或 交集 & 运算符来合并现有类型,提供了可扩展性。UjL28资讯网——每日最新资讯28at.com

接口无法直接表达这种行为。UjL28资讯网——每日最新资讯28at.com

// ✅ 正常工作type Person = {  name: string  age: number} & { job: string }// ❌ 不工作interface Person {  name: string  age: number} & { job: string }

实现

在 TypeScript 中,接口与面向对象编程(OOP)兼容,就像其他语言(例如 Java 或 C#)一样。UjL28资讯网——每日最新资讯28at.com

这意味着接口可以在类中使用 implements 实现。UjL28资讯网——每日最新资讯28at.com

现在让我们将 Person 定义为一个类,并实现一个名为 Work 的新接口,满足它们之间的约定。UjL28资讯网——每日最新资讯28at.com

// 实现示例interface Work {  doWork: () => void}class Person implements Work {  name: string  age: number  constructor(name: string, age: number) {    this.name = name    this.age = age  }  // 实现 doWork 方法以满足 `Work` 接口。  doWork() {    console.log("工作中...")  }}const person = new Person("John", 25)person.doWork()

因此,如果你经常使用 OOP,接口将比类型更适用,因为类型不能直接由类实现。UjL28资讯网——每日最新资讯28at.com

性能

当谈论性能时,我们指的是 TypeScript 编译器执行的 “类型检查” 性能,随着代码库规模的增加,其性能会呈指数级下降。UjL28资讯网——每日最新资讯28at.com

这就是为什么我们要对类型和接口在类型检查性能方面进行基准测试,看看哪个更优。UjL28资讯网——每日最新资讯28at.com

这是一个视频,由 Matt Pocock 解释了类型和接口之间的区别,以及在类型检查性能方面实际上 没有 类型和接口之间的任何差异。UjL28资讯网——每日最新资讯28at.com

接口为什么会有害

在 TypeScript 中,接口具有一个称为 声明合并 的独特特性。UjL28资讯网——每日最新资讯28at.com

声明合并是指 TypeScript 编译器将 两个或多个 具有相同名称的接口合并为 一个。UjL28资讯网——每日最新资讯28at.com

// 初始的 Person 接口interface Person {  name: string  age: number}// 使用 "声明合并" 来完善 Person 接口interface Person {  gender: string}// 使用 "合并" 接口来定义一个新的 "person"const person: Person = { name: "John", age: 25, gender: "男性" }

一方面,这个特性允许方便地对现有接口进行细化和扩展,而不会影响其他依赖项。UjL28资讯网——每日最新资讯28at.com

另一方面,声明合并可能会对你的代码库产生有害且令人惊讶的影响,主要有以下 两个 原因:UjL28资讯网——每日最新资讯28at.com

  • 优先级顺序:后面的声明总是优先于前面的声明。如果不小心,当在程序的许多部分进行声明合并时,这可能导致意外问题。
  • 与类的不安全合并:由于 TypeScript 编译器不检查属性的初始化,这可能导致意外的运行时错误。

类型没有这个问题,因此更直接且安全。UjL28资讯网——每日最新资讯28at.com

结论

除非需要特定的接口行为,例如可扩展的细化或使用 OOP 进行实现,否则最好使用类型。UjL28资讯网——每日最新资讯28at.com

类型灵活、直接,并且避免与声明合并相关的问题。UjL28资讯网——每日最新资讯28at.com

与接口相比,类型在性能上也完全相同,为你提供了另一个选择类型而不是接口的理由。UjL28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-87968-0.html请停止使用 TypeScript 接口

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Flask中四个好用的装饰器

下一篇: 用于时间序列概率预测的共形分位数回归

标签:
  • 热门焦点
  • K60 Pro官方停产 第三方瞬间涨价

    虽然没有官方宣布,但Redmi的一些高管也已经透露了,Redmi K60 Pro已经停产且不会补货,这一切都是为了即将到来的K60 Ultra铺路,属于厂家的正常操作。但有意思的是该机在停产之后
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 一加首款折叠屏!一加Open渲染图出炉:罕见单手可握小尺寸

    8月5日消息,此前就有爆料称,一加首款折叠屏手机将会在第三季度上市,如今随着时间临近,新机的各种消息也开始浮出水面。据悉,这款新机将会被命名为“On
  • 虚拟键盘 API 的妙用

    你是否在遇到过这样的问题:移动设备上有一个固定元素,当激活虚拟键盘时,该元素被隐藏在了键盘下方?多年来,这一直是 Web 上的默认行为,在本文中,我们将探讨这个问题、为什么会发生
  • 本地生活这块肥肉,拼多多也想吃一口

    出品/壹览商业 作者/李彦编辑/木鱼拼多多也看上本地生活这块蛋糕了。近期,拼多多在App首页“充值中心”入口上线了本机生活界面。壹览商业发现,该界面目前主要
  • 大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • OPPO K11搭载长寿版100W超级闪充:26分钟充满100%

    据此前官方宣布,OPPO将于7月25日也就是今天下午14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖
  • 机构称Q2全球智能手机出货量同比下滑11% 苹果份额依旧第2

    7月20日消息,据外媒报道,研究机构的报告显示,由于需求下滑,今年二季度全球智能手机的出货量,同比下滑了11%,三星、苹果等主要厂商的销量,较去年同期均有下
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克·扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:“不仅
Top