面试题答案
一键面试1. super关键字在TypeScript复杂类型场景中的作用
- 在抽象类与继承中的作用:在TypeScript里,抽象类作为一种不能被实例化,只能被继承的类,为子类提供了一个通用的框架。
super
关键字用于在子类中调用父类(抽象类)的构造函数、方法等。这在处理多态性时非常关键,因为子类虽然有自己的独特实现,但可能需要复用父类的一些基础逻辑。 - 与泛型结合的影响:泛型允许我们在定义函数、类或接口时不指定具体类型,而是在使用时再确定类型。当
super
与泛型一起使用时,它有助于保持类型的一致性和灵活性,使得在不同类型实例化的情况下,子类依然能正确调用父类的相关成员。
2. 代码示例
// 定义一个抽象类,使用泛型
abstract class Animal<T> {
name: string;
constructor(name: string) {
this.name = name;
}
abstract makeSound(): T;
}
// 子类继承抽象类,这里T被具体化为string类型
class Dog extends Animal<string> {
constructor(name: string) {
// 使用super调用父类构造函数
super(name);
}
makeSound(): string {
return `Woof! My name is ${this.name}`;
}
}
class Cat extends Animal<string> {
constructor(name: string) {
super(name);
}
makeSound(): string {
return `Meow! My name is ${this.name}`;
}
}
// 创建实例
const myDog = new Dog('Buddy');
const myCat = new Cat('Whiskers');
console.log(myDog.makeSound());
console.log(myCat.makeSound());
在上述代码中,Animal
是一个抽象类,使用了泛型T
。Dog
和Cat
类继承自Animal
,在它们的构造函数中通过super
调用了Animal
的构造函数来初始化name
属性。makeSound
方法在子类中有不同的实现,但都遵循了Animal
抽象类定义的契约。这里通过泛型和super
关键字,实现了类型的灵活定义以及父类逻辑的复用,展示了在复杂类型兼容性和多态性场景下super
关键字的重要作用。