操作符extends的作用是什么?

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

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

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

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

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

  1. 类型约束示例:
    function printName(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 extends (...args: any[]) => infer R ? R : any;
    
    function sum(a: number, b: number): number {
      return a + b;
    }
    
    type Result = ReturnType; // 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 中有多种用途,包括类型约束、类型推断和类继承。它使得我们可以对类型进行更精确的约束和操作,以及实现面向对象的继承关系。

你可能感兴趣的:(前端,javascript,typescript)