TS 入门(六):TypeScript泛型编程

news/2024/8/26 21:01:46 标签: typescript, javascript, 前端, ecmascript

目录

  • 前言
  • 回顾接口与类
  • 1. 泛型函数
  • 2. 泛型接口
  • 3. 泛型类
  • 4. 泛型约束
  • 5. 多重类型参数与默认类型
    • a. 多重类型参数
    • b. 默认类型参数
  • 结语

前言

在前三章中,我们介绍了 TypeScript 的基础知识、函数与对象类型。在本章中,我们将探讨更高级的类型和类型操作,包括联合类型、交叉类型、字面量类型、类型断言、类型兼容性和类型守卫等内容。通过这些高级特性,你将能够编写出更加灵活和强大的代码。

  • TS 入门(一):TypeScript 简介与安装
  • TS 入门(二):Typescript类型与类型注解
  • TS 入门(三):Typescript函数与对象类型
  • TS 入门(四):TypeScript 高级类型与类型操作
  • TS 入门(五):TypeScript接口与类

回顾接口与类

在上一章中,我们学习了以下内容:

  • 接口:包括基本接口、可选属性和只读属性、函数类型接口、可索引类型、接口继承。
  • 类:包括基本类、类的成员、构造函数、继承和派生类、公有、私有和受保护的修饰符、静态属性和方法、抽象类。

在这里插入图片描述

正文开始如果觉得文章对您有帮助,请帮我三连+订阅,谢谢💖💖💖


1. 泛型函数

泛型函数允许你在定义函数时指定类型参数,而不是具体的类型。这样可以在函数内部使用不同的类型。

typescript">function identity<T>(arg: T): T {
  return arg;
}

let output1 = identity<string>("我的名字"); // 输出类型为 'string'
let output2 = identity<number>(100); // 输出类型为 'number'
console.log(output1); // "我的名字"
console.log(output2); // 100

泛型函数还可以使用类型推断,根据传入的参数自动确定类型。

typescript">let output3 = identity("自动推断类型"); // 输出类型为 'string'
console.log(output3); // "自动推断类型"

2. 泛型接口

你可以使用泛型为接口定义类型参数,从而使接口更加灵活。

typescript">interface GenericIdentityFn<T> {
  (arg: T): T;
}

function identity2<T>(arg: T): T {
  return arg;
}

let myIdentity: GenericIdentityFn<number> = identity2;
console.log(myIdentity(42)); // 42

3. 泛型类

泛型也可以应用于类,使类能够处理不同的类型。

typescript">class GenericNumber<T> {
  zeroValue: T;
  add: (x: T, y: T) => T;

  constructor(zeroValue: T, addFn: (x: T, y: T) => T) {
    this.zeroValue = zeroValue;
    this.add = addFn;
  }
}

let myGenericNumber = new GenericNumber<number>(0, (x, y) => x + y);
console.log(myGenericNumber.add(5, 10)); // 15

4. 泛型约束

有时候我们希望泛型类型满足一定的条件,可以通过泛型约束来实现。

typescript">interface Lengthwise {
  length: number;
}

function loggingIdentity<T extends Lengthwise>(arg: T): T {
  console.log(arg.length); // 现在我们知道arg有length属性了
  return arg;
}

loggingIdentity({ length: 10, value: 3 }); // 输出: 10
// loggingIdentity(3); // 错误,number类型没有length属性

5. 多重类型参数与默认类型

a. 多重类型参数

泛型函数和类可以接受多个类型参数。

typescript">function map<T, U>(array: T[], transform: (item: T) => U): U[] {
  let result: U[] = [];
  for (let item of array) {
    result.push(transform(item));
  }
  return result;
}

let numbers = [1, 2, 3];
let strings = map(numbers, num => num.toString());
console.log(strings); // ["1", "2", "3"]

b. 默认类型参数

你可以为泛型参数指定默认类型,这样在没有明确传入类型参数时将使用默认类型。

typescript">class Container<T = string> {
  content: T;
  
  constructor(content: T) {
    this.content = content;
  }
}

let stringContainer = new Container("这是一个字符串");
console.log(stringContainer.content); // "这是一个字符串"

let numberContainer = new Container<number>(42);
console.log(numberContainer.content); // 42

结语

通过本章的学习,你应该对 TypeScript 中的泛型编程有了更深入的理解。掌握泛型将使你能够编写更加灵活和可重用的代码。在下一章中,我们将继续探讨 TypeScript 中的模块与命名空间,包括导入和导出、默认导出、重命名导入和导出、命名空间等内容。务必掌握好每个概念,它们将为你后续学习 TypeScript 提供坚实的基础。


http://www.niftyadmin.cn/n/5558401.html

相关文章

C++设计模式(装饰器模式)

装饰器模式&#xff08;Decorator Pattern&#xff09;是一种结构型设计模式&#xff0c;它允许在不改变原有对象结构和功能的基础上&#xff0c;动态地给对象添加额外的职责或功能。 装饰器模式的主要特点包括&#xff1a; 1. 保持了被装饰对象的核心职责不变。2. 能够透明地…

系统是如何存AMS对象的,应用是怎么取AMS的,这样设计有什么好处

在Android系统中&#xff0c;AMS&#xff08;Activity Manager Service&#xff09;是一个核心的系统服务&#xff0c;负责管理应用程序的Activity生命周期、进程管理、任务管理等。关于AMS对象的存储、应用如何获取AMS以及这样设计的好处&#xff0c;可以从以下几个方面进行阐…

大数据环境下的房地产数据分析与预测研究的设计与实现

1绪论 1.1研究背景及意义 随着经济的快速发展和城市化进程的推进&#xff0c;房地产市场成为了国民经济的重要组成部分。在中国&#xff0c;房地产行业对经济增长、就业创造和资本投资起到了重要的支撑作用。作为中国西南地区的重要城市&#xff0c;昆明的房地产市场也备受关…

求解答word图标变白

把WPS卸载了之后就变成白色了&#xff0c;然后在注册表中把word的地址改成office word的地址之后图标变成这样了&#xff0c;怎么办

十分钟“手撕”七大排序

前言&#xff1a;可以通过目录来找你需要的排序的源代码。先是解释底层原理&#xff0c;后附带代码。 目录 稳定的概念 一、插入排序 二、希尔排序 三、选择排序 四、堆排序 五、冒泡排序 六、快速排序 七、归并排序 八、排序总结 额外&#xff1a;计数排序 稳定的…

【问题记录】Docker配置mongodb副本集实现数据流实时获取

配置mongodb副本集实现数据流实时获取 前言操作步骤1. docker拉取mongodb镜像2. 连接mongo1镜像的mongosh3. 在mongosh中初始化副本集 注意点 前言 由于想用nodejs实现实时获取Mongodb数据流&#xff0c;但是报错显示需要有副本集的mongodb才能实现实时获取信息流&#xff0c;…

构建LangChain应用程序的示例代码:66、如何使用LangChain实现程序辅助语言模型(PAL)

程序辅助语言模型(PAL)链 实现程序辅助语言模型,如https://arxiv.org/pdf/2211.10435.pdf所述。 from langchain_experimental.pal_chain import PALChain from langchain_openai import OpenAI# 创建OpenAI语言模型实例,设置温度为0,最大令牌数为512 llm OpenAI(temperatur…

Linux基础 -- 运行安全之ASLR的作用与实现方式

Linux ARM ASLR 的作用与实现方式 简介 ASLR&#xff08;Address Space Layout Randomization&#xff0c;地址空间布局随机化&#xff09;是一种安全技术&#xff0c;用于防止攻击者通过利用已知的内存地址来进行攻击。它通过随机化进程的内存地址空间布局&#xff0c;使得内…