面试题答案
一键面试类型检查机制
在TypeScript中,当子类重写父类方法并通过super
调用父类方法时,TypeScript会确保子类方法的参数和返回值类型与父类方法的类型兼容。如果父类方法签名发生变化,TypeScript会根据新的签名检查子类中super
调用的参数是否匹配。如果不匹配,TypeScript会在编译阶段报错。
代码示例及问题
class Parent {
parentMethod(name: string): string {
return `Hello, ${name}`;
}
}
class Child extends Parent {
childMethod(): void {
let result = super.parentMethod(123); // 这里会报错,因为参数类型不匹配
console.log(result);
}
}
在上述示例中,Parent
类的parentMethod
接受一个string
类型的参数,而在Child
类的childMethod
中使用super.parentMethod
调用时传入了number
类型的参数,这会导致TypeScript编译报错。
解决办法
- 修正参数类型:确保
super
调用时传入的参数类型与父类方法签名匹配。
class Parent {
parentMethod(name: string): string {
return `Hello, ${name}`;
}
}
class Child extends Parent {
childMethod(): void {
let result = super.parentMethod('world');
console.log(result);
}
}
- 更新父类和子类方法签名:如果父类方法签名变化是合理的,同时更新子类方法的实现和调用。
class Parent {
parentMethod(id: number): string {
return `ID: ${id}`;
}
}
class Child extends Parent {
childMethod(): void {
let result = super.parentMethod(1);
console.log(result);
}
}
这样,通过正确匹配参数类型或更新方法签名,就可以避免因父类方法签名变化导致的super
调用问题。