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都支持,而且做的比他更好

相关推荐
程序员小寒1 小时前
JavaScript设计模式(八):命令模式实现与应用
前端·javascript·设计模式·ecmascript·命令模式
wgod1 小时前
new AbortController()
前端
UXbot2 小时前
UXbot 是什么?一句指令生成完整应用的 AI 工具
前端·ai·交互·个人开发·ai编程·原型模式·ux
棒棒的唐2 小时前
WSL2用npm安装的openclaw,无法正常使用openclaw gateway start启动服务的问题
前端·npm·gateway
哔哩哔哩技术2 小时前
使用Compose Navigation3进行屏幕适配
前端
:mnong2 小时前
Claude Code 项目设计分析
typescript·claude code
咬人喵喵3 小时前
E2.COOL 平台深度解析:从特效分类到实战操作指南
前端·编辑器·svg
RisunJan4 小时前
Linux命令-named-checkzone
linux·前端
小陈工4 小时前
Python Web开发入门(十):数据库迁移与版本管理——让数据库变更可控可回滚
前端·数据库·人工智能·python·sql·云原生·架构
吹晚风吧4 小时前
解决vite打包,base配置前缀,nginx的dist包找不到资源
服务器·前端·nginx