TS中,到底用`type`还是`interface`呢?

结论

直接说结论,用type一把梭即可,接下来我一一解释

为什么定义对象都要使用type呢?

如图所示,我鼠标悬浮后,并不知道里面是什么东西

只能获取结果时调出代码提示,或者ctrl + 鼠标左键进入,查看类型定义

那么我用type呢?

可以看到,现在鼠标悬浮能直接查看类型定义了

这一点是让我最受不了的,所以直接选择type即可

区别

1. 如何继承

先看看interface,通过extends关键字

type,则通过交叉类型,都能用,不过interface我认为好看点

2. 其他特性

interface重写时

  • 如果有不同的属性,则会添加;
  • 如果是相同的属性但是类型不同,则会报错

这点有好有坏,当你不小心名字重复了,那你就容易出问题

但同时利于扩展,不过没有人会这么写吧?

直接去原来的接口添加属性不行吗?

3. type独有的优势

除了上面的悬浮能查看具体类型外,type还提供了很多的关键字使用,这是interface不具备的

比如in关键字,用来枚举类型

这里我写个删除属性的泛型,和Omit一样的,但是interface不支持

此外还有很多TS特有的关键字,都只能通过type使用,比如infer

不过这也符合直觉,因为interface就是定义一个类型而已

经过以上探讨,可以得出一个结论,那就是interface能做的,type都支持,而且做的比他更好

相关推荐
onebyte8bits5 分钟前
前端国际化(i18n)体系设计与工程化落地
前端·国际化·i18n·工程化
C澒13 分钟前
前端分层架构实战:DDD 与 Clean Architecture 在大型业务系统中的落地路径与项目实践
前端·架构·系统架构·前端框架
BestSongC17 分钟前
行人摔倒检测系统 - 前端文档(1)
前端·人工智能·目标检测
0思必得01 小时前
[Web自动化] Selenium处理滚动条
前端·爬虫·python·selenium·自动化
Misnice1 小时前
Webpack、Vite、Rsbuild区别
前端·webpack·node.js
青茶3601 小时前
php怎么实现订单接口状态轮询(二)
前端·php·接口
大橙子额2 小时前
【解决报错】Cannot assign to read only property ‘exports‘ of object ‘#<Object>‘
前端·javascript·vue.js
爱喝白开水a3 小时前
前端AI自动化测试:brower-use调研让大模型帮你做网页交互与测试
前端·人工智能·大模型·prompt·交互·agent·rag
董世昌413 小时前
深度解析ES6 Set与Map:相同点、核心差异及实战选型
前端·javascript·es6
吃杠碰小鸡4 小时前
高中数学-数列-导数证明
前端·数学·算法