interface 声明合并
在 TypeScript 中,interface 声明合并时,如果多个接口具有重复的属性,TypeScript 会自动合并这些接口的属性:
如果重复的属性类型相同,
TypeScript会正常合并,不报错。如果重复的属性类型不同,
TypeScript会尝试创建一个联合类型。如果类型冲突不能自动解决,
TypeScript会报错。
🔎 1. interface 声明合并基础示例
interface 声明合并基础示例interface Person {
name: string;
}
interface Person {
age: number;
}
// 合并结果
interface Person {
name: string;
age: number;
}TypeScript 会将两个 Person 接口自动合并成一个,包含所有属性。
🔍 2. 当属性重复时的处理规则
✅ 属性类型相同:正常合并
TypeScript 会合并 User 接口,不会报错。
⚠️ 属性类型不同:自动创建联合类型
如果重复的属性类型不同,TypeScript 会自动将它们合并为联合类型。
❌ 方法签名冲突:返回类型冲突会报错
如果接口中有重复的方法签名,但返回类型不同,TypeScript 会报错,因为它无法确定该方法的正确返回类型。
✅ 解决方法:定义联合返回类型
方法重载的合并规则
TypeScript 支持方法重载,所以如果方法签名不同,但参数列表不同,则不会报错。
🔔 3. 规则总结
属性类型相同
正常合并
id: number + id: number
属性类型不同
自动创建联合类型
mode: string + mode: number → mode: string | number
方法签名不同
自动合并重载
print(text: string) + print(text: string, copies: number)
方法返回类型冲突
报错
calculate(a: number, b: number): number + calculate(a: number, b: number): string
总结
属性类型相同
正常合并
属性类型不同
自动创建联合类型
方法签名不同
自动合并为方法重载
方法返回类型冲突
报错,需手动调整为联合类型或重载签名
💡 建议:
当有可能出现冲突时,尽量手动调整属性类型为联合类型。
如果是方法签名冲突,考虑使用方法重载来解决问题。
最后更新于
这有帮助吗?