前端 TypeScript 面试题, TypeScript 的关键字 extends 有什么作用?
前端 TypeScript 面试题, TypeScript 的关键字 extends 有什么作用?
QA
Step 1
Q:: TypeScript 的关键字 extends
有什么作用?
A:: 在 TypeScript 中,extends
关键字主要用于以下几个方面:
1. **类型约束**:
在泛型中,extends
用于限制泛型的类型范围。例如,<T extends U>
表示泛型 T 必须是类型 U 的子类型。
2. **接口继承**:
extends
允许一个接口继承另一个接口,继承后,子接口将包含父接口的所有属性和方法。
3. **类继承**:
使用 extends
关键字可以创建一个继承自另一个类的类,从而实现类的继承和方法的重写。
在这些情况下,extends
提供了一种强大的类型安全机制,帮助开发者更好地定义类型和接口之间的关系。
Step 2
Q:: 如何在 TypeScript 中使用 extends
来创建泛型约束?
A:: 在 TypeScript 中,泛型约束通过 extends
关键字实现。它用于限制泛型参数的类型。例如:
function identity<T extends number | string>(value: T): T {
return value;
}
这里,泛型 T 被限制为 number
或 string
类型。因此,当调用该函数时,只能传入 number
或 string
类型的参数,否则会导致编译错误。
Step 3
Q:: 如何在 TypeScript 中使用 extends
来实现接口继承?
A:: 在 TypeScript 中,接口可以通过 extends
关键字继承另一个接口。比如:
interface Person {
name: string;
age: number;
}
interface Employee extends Person {
employeeId: number;
}
在这个例子中,Employee
接口继承了 Person
接口,因此 Employee
接口包含 Person
接口的所有属性,即 name
和 age
,并且还增加了 employeeId
属性。
Step 4
Q:: 如何在 TypeScript 中使用 extends
来实现类的继承?
A:: 在 TypeScript 中,类可以通过 extends
关键字继承另一个类。例如:
class Animal {
move(distance: number): void {
console.log(`Animal moved ${distance} meters.`);
}
}
class Dog extends Animal {
bark(): void {
console.log('Woof! Woof!');
}
}
在这个例子中,Dog
类继承了 Animal
类,因此 Dog
类可以访问 Animal
类的 move
方法,并且还可以定义自己的 bark
方法。