操作符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 中有多种用途,包括类型约束、类型推断和类继承。它使得我们可以对类型进行更精确的约束和操作,以及实现面向对象的继承关系。
相关文章
|
前端开发 JavaScript
HTML+JavaScript+CSS DIY 分隔条splitter
HTML+JavaScript+CSS DIY 分隔条splitter
ElementPlus 之 el-select 多选实现全选功能
本文介绍了在ElementPlus框架中,如何通过自定义事件处理和条件判断实现`el-select`多选控件的全选功能。
2210 1
ElementPlus 之 el-select 多选实现全选功能
|
运维 JavaScript 前端开发
前端 JS 经典:vue 开发中的 base 和 publicPath
前端 JS 经典:vue 开发中的 base 和 publicPath
811 1
echarts的xAxis和yAxis——x轴y轴以及网格线的详细配置
echarts的xAxis和yAxis——x轴y轴以及网格线的详细配置
5938 0
|
存储 机器学习/深度学习 人工智能
【LangChain系列】第八篇:文档问答简介及实践
【5月更文挑战第22天】本文探讨了如何使用大型语言模型(LLM)进行文档问答,通过结合LLM与外部数据源提高灵活性。 LangChain库被介绍为简化这一过程的工具,它涵盖了嵌入、向量存储和不同类型的检索问答链,如Stuff、Map-reduce、Refine和Map-rerank。文章通过示例展示了如何使用LLM从CSV文件中提取信息并以Markdown格式展示
704 2
node node-sass sass-loader版本对应问题,对于npm编译大家经常遇到这个问题
node node-sass sass-loader版本对应问题,对于npm编译大家经常遇到这个问题
2702 2
|
存储 关系型数据库 MySQL
精通MySQL:核心功能与实践应用
h3> 第一章:MySQL入门 1.1 MySQL概述 简要介绍MySQL的历史、特点以及在数据库领域的应用
Element UI 上传文件 el-upload —— 手动上传文件,限制上传文件数量,文件类型校验等
Element UI 上传文件 el-upload —— 手动上传文件,限制上传文件数量,文件类型校验等
4081 0
|
Java 领域建模 开发者
框架来解决优雅重试-spring retry
重试的意义To make processing more robust and less prone to failure, it sometimes helps to automatically retry a failed operation, in case it might succeed on a subsequent attempt. Errors that are susceptib
3026 0
框架来解决优雅重试-spring retry
|
存储 JavaScript 小程序
uni-app 全局变量实现的4种方式
uni-app 全局变量实现的4种方式
545 0