TypeScript中的接口与类型别名:如何选择?全栈老李带你彻底搞懂
🧑🏫 作者:全栈老李
📅 更新时间:2025 年 5 月
🧑💻 适合人群:前端初学者、进阶开发者
🚀 版权:本文由全栈老李原创,转载请注明出处。
最近在后台收到不少同学的私信:"老李啊,TypeScript里的interface和type到底有什么区别?我该用哪个?" 这确实是个好问题,今天咱们就来好好聊聊这个话题。
基础概念:它们都是类型定义的利器
先打个比方,接口和类型别名就像是你工具箱里的两把螺丝刀 - 都能拧螺丝,但各有各的顺手场景。在TypeScript中,它们都能用来定义变量、函数参数和返回值的形状。
// 全栈老李示例:接口定义
interface User {
name: string;
age: number;
}
// 全栈老李示例:类型别名定义
type UserType = {
name: string;
age: number;
}
看起来是不是很像?但它们的"性格"可大不相同。
核心区别:不仅仅是语法糖
1. 扩展方式不同
接口用extends,类型别名用&。这就像继承家产(接口)和合并财产(类型别名)的区别。
// 全栈老李示例:接口扩展
interface Admin extends User {
permissions: string[];
}
// 全栈老李示例:类型别名扩展
type AdminType = UserType & {
permissions: string[];
}