TypeScript -泛型知识点详情

TypeScript -泛型知识点详情

泛型(Generics)是 TypeScript 的一个核心特性,它允许你在定义函数、接口或类的时候不预先确定具体的类型。泛型提供了一种方式来创建可重用的组件,这些组件可以在不同的类型上操作而无需修改代码。以下是 TypeScript 中泛型的详细知识点:

1. 泛型函数

泛型函数可以接受任何类型的参数,并返回相同类型的结果。

function identity<T>(arg: T): T {return arg;
}let output = identity<string>("myString"); // type is string
let output2 = identity<number>(1024); // type is number

2. 泛型接口

泛型接口允许你定义一个接口,它可以用于不同的类型。

interface GenericIdentityFn<T> {(arg: T): T;
}let myIdentity: GenericIdentityFn<number> = identity;

3. 泛型类

泛型类允许你创建一个类,它可以用于不同的类型。

class GenericNumber<T> {zeroValue: T;add: (x: T, y: T) => T;
}let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = function(x, y) { return x + y; };

4. 泛型约束

你可以对泛型进行约束,以确保它们支持特定的操作。

interface Lengthwise {length: number;
}function loggingIdentity<T extends Lengthwise>(arg: T): T {console.log(arg.length); // 现在我们知道 T 有 length 属性return arg;
}loggingIdentity({ length: 10, value: 3 }).length; // OK

5. 泛型默认类型参数

在调用泛型函数时,如果省略了类型参数,TypeScript 会根据传入的参数自动推断类型。

function identity<T>(arg: T): T {return arg;
}// 由于传入了字符串,TypeScript 推断出 T 为 string
let output = identity("myString");

6. 泛型类型别名

泛型类型别名允许你创建一个泛型类型,它可以用于不同的类型。

type GenericIdentityFn<T> = (arg: T) => T;const myIdentity: GenericIdentityFn<number> = identity;

7. 泛型和联合类型

泛型可以与联合类型一起使用,以创建适用于多个类型的泛型函数。

function identity<T extends number | string>(arg: T): T {return arg;
}let output = identity(101); // number
let output2 = identity("hello"); // string

8. 泛型和类型别名

泛型可以与类型别名一起使用,以创建更复杂的类型。

type Container<T> = {value: T;
};const myContainer: Container<number> = { value: 1 };

9. 泛型和交叉类型

泛型可以与交叉类型一起使用,以创建具有多个类型的泛型函数。

type Lengthwise = {length: number;
};function extend<T extends Lengthwise, U extends Lengthwise>(first: T, second: U): T & U {const result = { ...first, ...second } as T & U;return result;
}const result = extend({ length: 10 }, { length: 20 });

10. 泛型和工具类型

TypeScript 提供了多种内置的泛型工具类型,如 Partial<T>, Readonly<T>, Record<K, T> 等,它们可以用于创建复杂的类型。

type Partial<T> = {[P in keyof T]?: T[P];
};interface Todo {title: string;description: string;
}type PartialTodo = Partial<Todo>;
const partialTodo: PartialTodo = { title: "Clean room" };

泛型是 TypeScript 中一个强大的工具,它允许你编写灵活且可重用的代码。通过使用泛型,你可以创建出适用于多种类型的函数、接口和类,而无需牺牲类型安全。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

《数据结构》学习系列——树(下)

系列文章目录 目录 树和森林的遍历树的遍历森林的遍历基本算法递归先根遍历树迭代先根遍历树树和森林的层次遍历 压缩与哈夫曼树文件编码扩充二叉树哈夫曼树和哈夫曼编码哈夫曼树的基本思路哈夫曼编码 树和森林的遍历 树的遍历 先根遍历&#xff1a;先访问树的根结点&#x…

想作弊❓用这个发起考试,根本没法作弊

&#x1f389; 推荐一款超实用的在线考试神器 —— 土著刷题✨ 如果你正在寻找一个既方便又高效的在线考试平台&#xff0c;那么“土著刷题”小&#x1f34a;序绝对值得一试&#xff01;它不仅完全免费&#xff0c;而且操作简单&#xff0c;非常适合用来组织线上测试。 &#x…

使用Angular构建动态Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Angular构建动态Web应用 1 引言 2 Angular简介 3 安装Angular 4 创建Angular项目 5 设计应用结构 6 创建组件 7 …

「Java SPI机制应用快速入门」: 一种JDK内置的服务提供发现机制

文章目录 什么是SPISPI机制的应用使用方法使用规范 入门案例 什么是SPI SPI首先是一种机制&#xff0c;这个机制叫&#xff1a;服务提供发现机制。那是谁来负责发现呢&#xff1f;当然是JDK内置的服务帮助我们发现啦。发现了帮助我们去调用&#xff0c;我们要做的就是在中间去…

2024护理类科技核心期刊汇总(最新版)

2024年9月中国科技核心期刊目录&#xff08;2024年版&#xff09;正式公布&#xff0c;13本护理类期刊入选。常笑医学整理了这13本护理类科技核心期刊的详细参数&#xff0c;以及投稿经验&#xff0c;供大家在论文投稿时参考&#xff0c;有需要的赶紧收藏&#xff01; 1.《中华…

SwiftUI(四)- 布局(VStack、HStack、ZStack)

引言 页面的搭建和布局在应用开发中几乎占据了一半的代码量。定于iOS开发而言&#xff0c;相较于其它平台&#xff0c;UIKit的布局方式显得相对局限&#xff0c;通常只有绝对布局和相对布局两种方案。而在Flutter或者Android开发中&#xff0c;布局选项更为丰富&#xff0c;比…

【mod分享】极品飞车9冬日mod,支持光追,想体验一把冬天的Rockport市吗

各位好&#xff0c;今天小编给大家带来一款新的高清重置魔改MOD&#xff0c;本次高清重置的游戏叫《极品飞车9最高通缉》。 《极品飞车&#xff1a;最高通缉》作为一款2005年的游戏&#xff0c;《极品飞车&#xff1a;最高通缉》的画面效果还是可以的&#xff0c;效果全开之后…

【状态机DP】力扣1186. 删除一次得到子数组最大和

给你一个整数数组&#xff0c;返回它的某个 非空 子数组&#xff08;连续元素&#xff09;在执行一次可选的删除操作后&#xff0c;所能得到的最大元素总和。换句话说&#xff0c;你可以从原数组中选出一个子数组&#xff0c;并可以决定要不要从中删除一个元素&#xff08;只能…

手机拍证件照,换正装有领衣服及底色的方法

证件照在我们的职业生涯的关键节点是经常会用到的&#xff0c;比如毕业入职、人事档案建立、升迁履历、执业资格考试和领证等&#xff0c;这些重要的证件照往往要求使用正装照&#xff0c;有时候手头没有合适的衣服&#xff0c;或者原先的证件照背景色不符合要求&#xff0c;就…

numpy——数学运算

一、标量——矢量 import numpy as npa 3.14 b np.array([[9, 5], [2, 7]])print(a) print(b)# ---------- 四则运算 ---------- print(a b) # np.add print(a - b) # np.subtract print(a * b) # np.multiply print(a / b) # np.divide 二、矢量——矢量 import nump…

优选算法精品课--双指针算法(2)

双指针算法&#xff08;2&#xff09; 1、有效三角形的个数1.1 题目解析1.2 思路解析1.3 代码实现 2、和为s的两个数2.1 题目解析2.2 思路解析2.3 代码实现 3、三数之和3.1 题目解析3.2 思路解析3.3 代码实现 4、四数之和4.1 题目解析4.2 思路解析4.3 代码实现 5 总结 1、有效三…

4个提取音频办法,轻松实现视频转音频!

在信息爆炸的时代&#xff0c;视频内容以其直观、生动的特点占据了互联网的大半江山。然而&#xff0c;在某些场景下&#xff0c;我们可能更倾向于只听取音频部分&#xff0c;无论是驾驶途中听讲座、跑步时享受音乐视频中的纯音乐的场景&#xff0c;还是为了节省流量和存储空间…

Python continue和break

continue的作用是&#xff1a; 中断所在循环的当次执行&#xff0c;直接进入下一次 break的作用是&#xff1a; 直接结束所在的循环 注意事项&#xff1a; continue和break&#xff0c;在for和while循环中作用一致 在嵌套循环中&#xff0c;只能作用在所在的循环上&#x…

【01初识】-初识 RabbitMQ

目录 学习背景1- 初识 MQ1-1 同步调用什么是同步调用&#xff1f;小结&#xff1a;同步调用优缺点 1-2 异步调用什么是异步调用&#xff1f;小结&#xff1a;异步调用的优缺点&#xff0c;什么时候使用异步调用&#xff1f; 1-3 MQ 技术选型 学习背景 异步通讯的特点&#xff…

300元蓝牙耳机性价比高的有哪些?学生平价蓝牙耳机推荐

你是否正在为选择一款性价比高的蓝牙耳机而烦恼&#xff1f;是否希望找到一款既适合学生使用&#xff0c;又能在预算内满足需求的蓝牙耳机&#xff1f;300元蓝牙耳机性价比高的有哪些&#xff1f;如果你有这样的需求&#xff0c;那么下面我将为大家提供一些有益的参考&#xff…

中间件安全(三)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 本文主要讲解apache命令执行漏洞&#xff08;cve_2021_41773&#xff09;。 靶场链接&#xff1a;Vulfocus 漏洞威胁分析平台 一&#xff0c;漏洞简介。 cve_2021_41773漏洞…

【STM32外设及其应用】

&#x1f308;个人主页: 程序员不想敲代码啊 &#x1f3c6;CSDN优质创作者&#xff0c;CSDN实力新星&#xff0c;CSDN博客专家 &#x1f44d;点赞⭐评论⭐收藏 &#x1f91d;希望本文对您有所裨益&#xff0c;如有不足之处&#xff0c;欢迎在评论区提出指正&#xff0c;让我们共…

pyvideotrans 最佳AI翻译软件

文章目录 体验视频翻译配音工具主要用途和功能预打包版本(仅win10/win11可用&#xff0c;MacOS/Linux系统使用源码部署)MacOS源码部署Linux 源码部署Window10/11 源码部署源码部署问题说明使用教程和文档语音识别模型:视频教程(第三方)软件预览截图相关联项目致谢 体验 不错&a…

【含开题报告+文档+PPT+源码】基于SpringBoot的健康知识学习分享平台的设计与实现

开题报告 随着人们生活水平的提高和健康意识的增强&#xff0c;健康知识在日常生活中的重要性日益凸显。传统的健康知识获取途径如书籍、讲座等虽然具有一定的效果&#xff0c;但存在信息更新慢、交互性差等局限性。同时&#xff0c;互联网的普及和移动互联网的发展为人们提供…

【算法刷题指南】双指针

&#x1f308;个人主页&#xff1a; 南桥几晴秋 &#x1f308;C专栏&#xff1a; 南桥谈C &#x1f308;C语言专栏&#xff1a; C语言学习系列 &#x1f308;Linux学习专栏&#xff1a; 南桥谈Linux &#x1f308;数据结构学习专栏&#xff1a; 数据结构杂谈 &#x1f308;数据…