第十八节TypeScript 泛型

1、简介

泛型是一种编程语言特性,允许在定义函数、类、接口等使用占位符来表示类型,而不是具体的类型。

泛型是一种在编写可重用、灵活且类型安全的代码时非常有用的功能。

使用泛型的主要目的是为了处理不特定类型的数据,使得代码可以适用于多种类型而不失去类型检查。

泛型的优势:

  • 代码重用 - 可以编写与特定类型你那个无关的通用代码,提高代码的复用性。
  • 类型安全 - 在编译时进行类型检查,避免在运行时出现类型错误。
  • 抽象性 - 允许编写更抽象和通用的代码,适应不同的数据类型和数据结构。

2、泛型标识符

在泛型中,通常使用一些约定俗成的标识符,比如常见的T、U、V等,但实际上你可以使用任何标识符。

1)、T:代表“Type”,是最常用的泛型类型参数名。

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

2)、K、V用于标识键(key)和值(Value)的泛型类型参数。

interface KeyValuePair<K, V> {
    key: K;
    value: V;
}

3)、E:用于表示数组元素的泛型类型参数

function printArray<E>(arr: E[]): void {
    arr.forEach(item => console.log(item));
}

4)、R:表示函数返回值的泛型类型参数

function printArray<E>(arr: E[]): void {
    arr.forEach(item => console.log(item));
}

5)、U、V:通常用于表示第二、第三个泛型类型参数

function combine<U, V>(first: U, second: V): string {
    return `${first} ${second}`;
}

        名称。关键是使得代码易读和易于理解,所以建议在泛型类型参数上使用描述性的名称,以便于理解其用途。

3、泛型函数

使用泛型来创建一个可以处理不同类型的函数。

实例:

function identity<T>(arg: T): T {
    return arg;
}
// 使用泛型函数
let result = identity<string>("Hello");
console.log(result); // 输出: Hello
let numberResult = identity<number>(42);
console.log(numberResult); // 输出: 42

        解析: 以上例子中,identity 是一个泛型函数,使用 <T> 表示泛型类型。它接受一个参数 arg 和返回值都是泛型类型 T。在使用时,可以通过尖括号 <> 明确指定泛型类型。第一个调用指定了 string 类型,第二个调用指定了 number 类型。

4、泛型接口

可以使用泛型来定义接口,使接口的成员能够使用任意类型:

// 基本语法
interface Pair<T, U> {
    first: T;
    second: U;
}
// 使用泛型接口
let pair: Pair<string, number> = { first: "hello", second: 42 };
console.log(pair); // 输出: { first: 'hello', second: 42 }

        解析: 这里定义了一个泛型接口 Pair,它有两个类型参数 T 和 U。然后,使用这个泛型接口创建了一个对象 pair,其中 first 是字符串类型,second 是数字类型。

5、泛型类

泛型也可以应用于类的实例变量和方法:

// 基本语法
class Box<T> {
    private value: T;

    constructor(value: T) {
        this.value = value;
    }

    getValue(): T {
        return this.value;
    }
}

// 使用泛型类
let stringBox = new Box<string>("TypeScript");
console.log(stringBox.getValue()); // 输出: TypeScript

        解析: 在这个例子中,Box 是一个泛型类,使用 <T> 表示泛型类型。构造函数和方法都可以使用泛型类型 T。通过实例化 Box<string>,我们创建了一个存储字符串的 Box 实例,并通过 getValue 方法获取了存储的值。

6、泛型与默认值

可以给泛型设置默认值,使得在不指定类型参数时能够使用默认类型:

// 基本语法
function defaultValue<T = string>(arg: T): T {
    return arg;
}

// 使用带默认值的泛型函数
let result1 = defaultValue("hello"); // 推断为 string 类型
let result2 = defaultValue(42);      // 推断为 number 类型

        说明:这个例子展示了带有默认值的泛型函数。函数 defaultValue 接受一个泛型参数 T,并给它设置了默认类型为 string。在使用时,如果没有显式指定类型,会使用默认类型。在例子中,第一个调用中 result1 推断为 string 类型,第二个调用中 result2 推断为 number 类型。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/269079.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

公众号推荐流量玩法的3个秘密

从微信生态的流量触点来看&#xff0c;公众号链接着私聊、朋友圈、微信群、小程序、视频号、搜一搜、看一看等一切与目标用户能接触到的中转站 流量的尽头是私域。而对于大部分普通人来说&#xff0c;公众号可以作为私域的第一站。且相比个人微信号&#xff0c;其有着深度价值…

【数字电路】期末速通!

1. 数制及转换 常用的数制&#xff1a;十进制&#xff08;D&#xff09;&#xff0c;二进制&#xff08;B&#xff09;&#xff0c;八进制&#xff08;O&#xff09;&#xff0c;十六进制&#xff08;H&#xff09;。 常见的码制包括以下几种&#xff1a; 二进制码&#xff…

xposed 02 - 模块编写与构造函数Hook

本文讨论一下xposed模块编写的步骤&#xff0c;与如何hook构造函数&#xff0c;以及一些需要注意的地方。 Xposed模块编写 跟把大象放冰箱分3步一样&#xff0c;编写xposed模块只需要4步。 第一步 拷贝 XposedBridgeApi.jar 到模块工程的 libs 目录下&#xff0c;放一个 ja…

Unity 根据 数字 让 显示游戏总时长的txt直接显示该个 时间时分秒显示方法

Unity 根据 数字 让 显示游戏总时长的txt直接显示该个 时间时分秒显示方法 效果如下&#xff1a; 上代码 void Update(){int timeER int.Parse((txt_gameTimesER - Time.deltaTime).ToString("00"));Set_All_PlayTime_txtLookTime(timeER,bg.txt_LastTime); }/// &…

c 语言学习:输出阶乘的算式

c 语言学习&#xff1a;输出阶乘的算式 代码 #include "stdio.h"int fact(int num){if (num < 1){printf("1 ");return 1;} else {printf("%d x ",num);return num * fact(num-1);} }int main(){int num 10; // printf("plz inpu…

[Latex写作] vscode搭建latex写作环境

个人博客:Sekyoro的博客小屋 个人网站:Proanimer的个人网站 如果是为了方便简洁,实际使用Overleaf完全够了,之前也写过使用Obsidian写文章的教程. 这次主要介绍使用在本地vscode加上插件写论文. 需要工具 vscode 官网即可texlive 通过镜像站即可,比如Index of /CTAN/systems…

类和对象的创建和实例化

1. 类的概述 1.1 具体示例 类是描述一类事物的特征和行为的统称&#xff0c;抽象的不存在的&#xff0c;泛指的概念&#xff0c;例如&#xff1a;描述一个人&#xff0c;从外观上&#xff08;特征&#xff09;和言行举止&#xff08;行为&#xff09;上进行描述外观上&#xff…

智能安全配电装置在临时展会场所中的应用

贾丽丽 安科瑞电气股份有限公司 上海嘉定 201801 【摘要】简述了商场临时展会、展摊等场所中电气装置用电的特性&#xff0c;针对此类场所中隐含的电气安全隐患问题&#xff0c;结合智能安全配电装置的功能&#xff0c;从用电设备的接地、线路的安装与敷设、设备的维护和管理…

LaTex插入图片

一、插入图片 在.tex文件开头导入相应的宏包 \documentclass{article} \usepackage{graphicx} % 导入图像的宏包、单图 \usepackage{subfigure} % 导入图像的宏包、子图 \graphicspath{{./images/}} % 告诉 LaTeX 这篇文档中的图片所存储的位置是主文档所在目录下的 images 文…

【XR806开发板试用】系列之二:出现已经成功编译,但是无法生成镜像文件的问题

本文主要对于编译成功但是烧录出现问题进行解决&#xff0c;用Hello world 和LED点亮代码作为示范 文章仅为参考网络资料和自身理解&#xff0c;如有不正确之处请多指正 首先确定自己根目录在哪&#xff0c;我们都在根目录进行hb set和hb build -f,判断方法是寻找ohos_config.…

为什么要出现并发?并发的三要素

大家好&#xff0c;我是"java继父"伯约&#xff0c;假如这篇对大家有帮助的话求一个赞&#xff0c;另外文章末尾放了我从小白到架构师多年的学习资料。 1.为什么需要多线程 众所周知&#xff0c;CPU、内存、I/O 设备的速度是有极大差异的&#xff0c;为了合理利用 C…

CentOS环境下Nacos2.3集成PostgreSQL

title: CentOS环境下Nacos2.3集成PostgreSQL date: 2023-12-21 19:15:00 categories: Nacos description: CentOS环境下Nacos2.3集成PostgreSQL 1. 目录 1. 目录2. 简介3. 安装部署 3.1. 部署模式3.2. 环境准备3.3. 下载安装文件3.4. PostgreSQL插件 3.4.1. 下载地址3.4.2. 结…

圆中点算法

中心在原点&#xff0c;半径为 R 的圆的隐式函数方程为 F ( x , y ) x 2 y 2 − R 2 0 F(x, y) x^2 y^2 - R^2 0 F(x,y)x2y2−R20 把像素上的点的坐标代入上述隐式方程 八分法画圆算法 利用坐标轴和与坐标轴夹角 45 度的直线 原理 假设圆弧起点 x 0 x0 x0&#xff0…

经典文献阅读之--RenderOcc(使用2D标签训练多视图3D Occupancy模型)

0. 简介 3D占据预测在机器人感知和自动驾驶领域具有重要的潜力&#xff0c;它将3D场景量化为带有语义标签的网格单元。最近的研究主要利用3D体素空间中的完整占据标签进行监督。然而&#xff0c;昂贵的注释过程和有时模糊的标签严重限制了3D占据模型的可用性和可扩展性。为了解…

SQL Server的权限设置

实验环境&#xff08;实验案例一&#xff09; 某公司部署了 SQL Server 2016用来存储网站数据&#xff0c;由系统管理员进行维护.在bdon数据库中 已创建了class表。 需求描述 赋予用户zhangsan在bdqn数据库中创建表的权限和对class表查询和更新数据的权限。

ASP.NET Core 中的应用启动

ASP.NET Core 中的应用启动 | Microsoft Learnhttps://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/startup?viewaspnetcore-8.0 目录 使用 Startup 筛选器扩展 Startup 在启动时从外部程序集添加配置 Startup、ConfigureServices 和 Configure 作者&#xff1a;…

每日一题——LeetCode141.环形链表

个人主页&#xff1a;白日依山璟 专栏&#xff1a;Java|数据结构与算法|每日一题 文章目录 1. 题目描述示例1&#xff1a;示例2&#xff1a;示例3&#xff1a;提示: 2. 思路3. 代码 1. 题目描述 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某…

041、基于CNN的样式迁移

之——基于CNN的滤镜 目录 之——基于CNN的滤镜 杂谈 正文 1.基于CNN的样式迁移 2.实现 杂谈 通过CNN的特征提取&#xff0c;可以实现将一个图片的样式模式特征迁移到另一张图像上。 正文 1.基于CNN的样式迁移 就是在某些层的输出上用其他的图片进行监督。 2.实现 一般来…

国际会议口译,选择同传好还是交传好

在国际会议中&#xff0c;同传与交传是常见的两种翻译方式&#xff0c;它们各自承载着独特的使命与优势&#xff0c;为沟通世界发挥着不可替代的作用。那么&#xff0c;同传好还是交传好&#xff0c;如何选择合适的翻译方式&#xff1f; 首先&#xff0c;从费用角度来看&#x…

苹果怎么调字体大小?详细教程在这,赶快get起来!

在我们使用苹果手机时&#xff0c;可能会遇到需要调整字体大小的情况。合适的字体大小能够提高阅读体验和舒适度&#xff0c;使得手机使用更加便捷。然而&#xff0c;还有很多用户并不知道苹果怎么调字体大小。别着急&#xff01;本文将为您详细介绍操作方法&#xff0c;帮助您…