// 父类使用泛型定义属性类型
class GenericClass<T> {
value: T;
constructor(value: T) {
this.value = value;
}
}
// 定义一个交叉类型的接口,用于扩展功能
interface ExtendedFunctionality {
extendedMethod(): void;
}
// 子类通过交叉类型扩展父类功能
class SubClass<T> extends GenericClass<T> implements ExtendedFunctionality {
extendedMethod(): void {
console.log(`The value is: ${this.value}`);
}
}
// 示例使用
let subClassInstance = new SubClass<string>("Hello, World!");
subClassInstance.extendedMethod();
交叉类型与泛型协同工作的优势解释
- 灵活性增强:
- 泛型:使得父类
GenericClass
可以适应多种不同的数据类型,而不需要为每种类型重复编写类似的代码。比如GenericClass<number>
、GenericClass<string>
等都可以正常工作,增强了代码在数据类型层面的灵活性。
- 交叉类型:子类
SubClass
通过实现ExtendedFunctionality
接口(交叉类型的体现),在继承父类功能的基础上,又添加了额外的功能extendedMethod
。这使得SubClass
既保留了泛型带来的类型灵活性,又能添加特定的功能,从而在功能层面也增强了灵活性。例如,无论是SubClass<number>
还是SubClass<string>
的实例,都拥有extendedMethod
方法。
- 可维护性增强:
- 泛型:如果需要修改父类
GenericClass
针对属性value
的一些操作逻辑,只需要在一处修改,所有使用不同类型参数实例化的GenericClass
及其子类SubClass
都会受到影响,避免了在多处重复修改相同逻辑的代码,减少了维护成本。
- 交叉类型:通过接口
ExtendedFunctionality
来定义扩展功能,使得代码结构更加清晰。如果需要对扩展功能进行修改或添加新的扩展功能,只需要在接口及其实现(子类SubClass
的extendedMethod
)处进行操作,而不会影响到父类GenericClass
的泛型相关逻辑。这种模块化的设计使得代码在维护时更加容易理解和修改。