操作符extends的作用是什么?

简介: 操作符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 属性
  1. 在这个示例中,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
  1. 在这个示例中,T extends (...args: any[]) => infer R 表示如果 T 是一个函数类型,那么将其返回值类型推断为 R 类型。
  2. 类继承示例:
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
  1. 在这个示例中,Dog 类继承自 Animal 类,通过 extends 关键字建立了类之间的继承关系。子类 Dog 继承了父类 Animal 的属性和方法,并可以进行扩展或重写。
    总之,extends 操作符在 TypeScript 中有多种用途,包括类型约束、类型推断和类继承。它使得我们可以对类型进行更精确的约束和操作,以及实现面向对象的继承关系。
相关文章
|
7月前
|
JavaScript
操作符extends的作用是什么?
操作符extends的作用是什么?
40 0
|
7月前
|
安全 JavaScript
操作符keyof的作用是什么?
操作符keyof的作用是什么?
44 0
|
Java
【Java面向对象】继承的认识与实现(2) 关键字 this 与 super 区别
【Java面向对象】继承的认识与实现(2) 关键字 this 与 super 区别
80 0
|
7月前
|
JavaScript
操作符keyof的作用是什么?
操作符keyof的作用是什么?
|
7月前
|
JavaScript
操作符extends的作用是什么
操作符extends的作用是什么
65 2
|
7月前
|
JavaScript 安全
操作符keyof的作用是什么
操作符keyof的作用是什么
71 3
|
Java 编译器
【继承顺序和方式,子类构造方法,protected 关键字,final 关键字】
【继承顺序和方式,子类构造方法,protected 关键字,final 关键字】
46 0
|
Java
final 类,常量,方法的解释
final 类,常量,方法的解释
95 1
|
存储 Java
java中final修饰符,修饰变量、方法、类的详细用法
java中final修饰符,修饰变量、方法、类的详细用法
145 0
|
Java 编译器
重写,重写规则 Super 关键字的使用,重写与重载之间的区别 , @override有什么用,以及加不加@override有什么区别
重写,重写规则 Super 关键字的使用,重写与重载之间的区别 , @override有什么用,以及加不加@override有什么区别
252 0