当前位置: 首页 > news >正文

TypeScript中的type和interface的区别是什么?

在 TypeScript 里,typeinterface 都是用来定义类型的,但它们有一些相似之处重要区别

1. 相同点

  • 都可以用来描述对象的结构(属性、方法等)。

  • 都支持 可选属性(?只读属性(readonly

  • 都可以被扩展(extend / 继承)。

  • 都能用于函数参数、变量、返回值的类型声明。

例子:

type User1 = {name: string;age: number;
}interface User2 {name: string;age: number;
}const u1: User1 = { name: '张三', age: 18 };
const u2: User2 = { name: '李四', age: 20 };

2. 不同点

① 声明合并

  • interface 可以重复声明,TypeScript 会自动合并它们的成员。

  • type 不能重复声明(会报错)。

interface Person {name: string;
}
interface Person {age: number;
}
// 合并后:{ name: string; age: number; }
const p: Person = { name: '张三', age: 18 };type PersonType = { name: string; };
// ❌ 重复声明会报错
// type PersonType = { age: number; };

② 表示的范围

  • type 更广,不仅能表示对象类型,还能表示:

    • 基本类型别名

    • 联合类型

    • 交叉类型

    • 条件类型

    • 元组

  • interface 只能描述对象结构(对象、类、函数)。

// type 可以做这些:
type MyString = string;
type ID = number | string;
type Tuple = [string, number];
type Status<T> = T extends string ? 'ok' : 'fail';// interface 做不了这些:

③ 扩展方式

  • interfaceextends 来继承。

  • type交叉类型(& 来组合。

interface A {name: string;
}
interface B extends A {age: number;
}type C = { name: string };
type D = C & { age: number };

④ 实现类

  • interface 可以用 implements 让类去实现。

  • type 虽然也可以被类用来约束结构,但不能被 implements 直接继承联合类型等复杂类型(会有限制)。

interface Animal {name: string;
}
class Dog implements Animal {name = '旺财';
}

3. 如何选择?

  • 如果是定义对象结构(尤其是给类用),推荐用 interface(可合并、可继承)。

  • 如果需要用到联合类型 / 条件类型 / 元组 / 基本类型别名,只能用 type

  • 项目里混用是常见的

    • interface 描述数据结构

    • type 处理类型变换和复杂组合

📌 记忆口诀:

能用 interface 就用 interface,需要高级类型能力就用 type
interface 像积木,可以拼接扩展;
type 像模具,可以塑造各种形状。

type vs interface 对比表

特性 / 能力interfacetype
定义对象结构✅ 支持✅ 支持
定义函数类型✅ 支持✅ 支持
定义数组 / 元组❌ 不支持✅ 支持
定义基本类型别名(如 string, number❌ 不支持✅ 支持
联合类型(|)❌ 不支持✅ 支持
交叉类型(&)✅ 支持(extends✅ 支持(&
条件类型❌ 不支持✅ 支持
可重复声明并合并✅ 支持❌ 不支持
泛型支持✅ 支持✅ 支持
implements✅ 支持⚠️ 支持有限(复杂类型可能报错)
扩展方式extends& 交叉类型
适合场景数据结构、面向对象高级类型运算、类型组合

📌 口诀版记忆:

  • interface:更像“乐高积木”,能一块一块拼接(可合并、可继承)。

  • type:更像“模具”,能塑造各种奇形怪状(元组、联合、条件类型都能搞)。

http://www.lryc.cn/news/616356.html

相关文章:

  • 从街亭失守看管理
  • WAV音频数据集MFCC特征提取处理办法
  • 【MySQL——第三章 :MySQL库表操作】
  • 如何选择适合自己电商业务的 API?​
  • DBAPI 实现不同角色控制查看表的不同列
  • 七、CV_模型微调
  • 使用快捷键将当前屏幕内容滚动到边缘@首行首列@定位到第一行第一个字符@跳转到4个角落
  • Knuth‘s TwoSum Algorithm 原理详解
  • 每日任务day0810:小小勇者成长记之武器精炼
  • 机器学习 DBScan
  • VUE+SPRINGBOOT从0-1打造前后端-前后台系统-关于我们
  • 人大地平线新国立单目具身导航新范式!MonoDream:基于全景想象的单目视觉语言导航
  • 周学会Matplotlib3 Python 数据可视化-绘制折线图(Lines)
  • python中re模块详细教程
  • 论文阅读:Aircraft Trajectory Prediction Based on Residual Recurrent Neural Networks
  • SupChains团队:化学品制造商 ChampionX 供应链需求预测案例分享(十七)
  • Speaking T2 - Dining Hall to CloseDuring Spring Break
  • 2025华数杯比赛还未完全结束!数模论文可以发表期刊会议
  • Redis一站式指南二:主从模式高效解决分布式系统“单点问题”
  • 安全引导功能及ATF的启动过程(五)
  • 【GPT入门】第44课 检查 LlamaFactory微调Llama3的效果
  • ThreadLocal有哪些内存泄露问题,如何避免?
  • 商业解决方案技术栈总结
  • 洛谷 P2404 自然数的拆分问题-普及-
  • LeetCode - 搜索插入位置 / 排序链表
  • 音视频学习(五十一):AAC编码器
  • 力扣(买卖股票的最佳时机I/II)
  • 面对信号在时频平面打结,VNCMD分割算法深度解密
  • windows的cmd命令【持续更新】
  • 数据库面试题集