ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

操作符extends的作用是什么?

2026/8/9 2:46:15 拓冰建站 浏览量
操作符extends的作用是什么?

在 TypeScript 中,extends 操作符有多个作用和用途。

  1. 类型约束:extends 用于约束泛型类型参数,限制其必须是某个类型的子类型。例如,T extends SomeType 表示 T 必须是 SomeType 或其子类型。

  2. 类型推断:extends 用于从条件类型中推断出新的类型。通过使用 infer 关键字,我们可以在条件类型中引入新的类型变量,并使用 extends 来对其进行推断。

  3. 类继承:extends 用于表示一个类继承自另一个类。通过继承,子类可以获得父类的属性和方法,并可以进行扩展或重写。

以下是一些示例来说明 extends 的不同用途:

  1. 类型约束示例:
    function printName<T extends { name: string }>(obj: T) {console.log(obj.name);
    }printName({ name: "Alice", age: 30 }); // 正确,传入的对象满足约束
    printName({ age: 30 }); // 错误,缺少 name 属性
    

    在这个示例中,T extends { name: string } 表示泛型类型参数 T 必须满足约束,即必须具有 name 属性且类型为 string

  2. 类型推断示例:
    type ReturnType<T> = T extends (...args: any[]) => infer R ? R : any;function sum(a: number, b: number): number {return a + b;
    }type Result = ReturnType<typeof sum>; // number
    

    在这个示例中,T extends (...args: any[]) => infer R 表示如果 T 是一个函数类型,那么将其返回值类型推断为 R 类型。

  3. 类继承示例:
    class Animal {name: string;constructor(name: string) {this.name = name;}speak() {console.log("The animal makes a sound");}
    }class Dog extends Animal {breed: string;constructor(name: string, breed: string) {super(name);this.breed = breed;}speak() {console.log("The dog barks");}
    }const dog = new Dog("Buddy", "Labrador");
    console.log(dog.name); // Buddy
    dog.speak(); // The dog barks
    

    在这个示例中,Dog 类继承自 Animal 类,通过 extends 关键字建立了类之间的继承关系。子类 Dog 继承了父类 Animal 的属性和方法,并可以进行扩展或重写。

    总之,extends 操作符在 TypeScript 中有多种用途,包括类型约束、类型推断和类继承。它使得我们可以对类型进行更精确的约束和操作,以及实现面向对象的继承关系。