interview
typescript-frontend
TypeScript 的关键字 extends 有什么作用

前端 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 被限制为 numberstring 类型。因此,当调用该函数时,只能传入 numberstring 类型的参数,否则会导致编译错误。

Step 3

Q:: 如何在 TypeScript 中使用 extends 来实现接口继承?

A:: 在 TypeScript 中,接口可以通过 extends 关键字继承另一个接口。比如:

 
interface Person {
    name: string;
    age: number;
}
 
interface Employee extends Person {
    employeeId: number;
}
 

在这个例子中,Employee 接口继承了 Person 接口,因此 Employee 接口包含 Person 接口的所有属性,即 nameage,并且还增加了 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 方法。

用途

面试这个内容是因为 `extends` 关键字是 TypeScript 中的重要概念,涉及到泛型、接口、类的继承等多方面的知识。这些知识点在实际生产环境中频繁使用,比如在设计复杂的数据结构、实现类的继承和接口扩展时,合理使用 `extends` 可以提高代码的灵活性、可读性和类型安全性。尤其是在大型项目中,理解和运用好 `extends` 关键字,可以帮助开发者有效地管理代码的复杂性,避免潜在的类型错误。\n

相关问题

🦆
TypeScript 中 extends 和 implements 的区别是什么?

extends 用于类、接口的继承,即一个类或接口可以继承另一个类或接口。而 implements 则用于实现接口,即一个类可以实现一个或多个接口。extends 是继承(扩展)一个已有的类型,获取其属性和方法;implements 则是确保一个类实现了某个接口中定义的所有属性和方法。

🦆
如何在 TypeScript 中实现多个接口的继承?

在 TypeScript 中,接口可以继承多个接口,例如:

 
interface A {
    a: string;
}
 
interface B {
    b: number;
}
 
interface C extends A, B {
    c: boolean;
}
 

这里,接口 C 继承了接口 AB,因此 C 接口包括了 AB 的所有属性,即 a``, b``, c

🦆
在 TypeScript 中,类可以同时继承和实现接口吗?

可以。在 TypeScript 中,一个类可以使用 extends 继承另一个类,并且使用 implements 实现一个或多个接口。例如:

 
class BaseClass {
    baseMethod(): void {
        console.log('Base method');
    }
}
 
interface MyInterface {
    myMethod(): void;
}
 
class MyClass extends BaseClass implements MyInterface {
    myMethod(): void {
        console.log('My method');
    }
}
 

这里,MyClass 继承了 BaseClass,并实现了 MyInterface