当前位置: 首页 > news >正文

TypeScript中的泛型

在 TypeScript(简称 TS)中,泛型(Generics)是一种允许你为组件(如类、接口和函数)定义灵活、可重用的类型的方式。泛型可以看作是一种类型参数化,允许你在声明时定义一个或多个类型占位符,并在使用组件时提供具体的类型。

以下是泛型在 TypeScript 中的一些主要应用:

(1)泛型函数

泛型函数可以在函数名后面使用尖括号 <> 来定义类型变量。

function identity<T>(arg: T): T {  return arg;  
}  let output = identity<string>("myString");  // 输出 "myString"  
let numOutput = identity<number>(123);      // 输出 123

注意,在 TypeScript 中,如果你能提供足够的类型信息,编译器通常会推断出类型参数,因此你可以省略类型参数:

let output = identity("myString");  // 输出 "myString",编译器推断出 T 是 string

(2)泛型类

泛型类允许你在类声明中定义类型变量。

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; };

但通常,对于类中的方法,我们会使用接口和类型别名来实现泛型方法,而不是直接在类上定义泛型。
(3)泛型接口

泛型接口允许你在接口中定义类型变量。

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

(4)泛型约束

在定义泛型时,你可能会想对类型参数进行一些约束。例如,你可能希望泛型类型参数是一个具有 .length 属性的类型。这可以通过 extends 关键字来实现:

interface Lengthwise {  length: number;  
}  function loggingIdentity<T extends Lengthwise>(arg: T): T {  console.log(arg.length);  // 现在我们可以访问 arg.length 了  return arg;  
}

(5)泛型数组

TypeScript 提供了内置的泛型,如 Array<T>

let list: Array<number> = [1, 2, 3];

(6)泛型元组

在 TypeScript 4.0 及更高版本中,你可以使用泛型来创建元组:

type Pair<T, U> = [T, U];  
let pair: Pair<string, number> = ['hello', 10]; // 正确

(7)泛型映射类型

你可以使用泛型来创建映射类型,这些类型将对象中的每个属性从一种类型转换为另一种类型。例如,Partial<T> 和 Readonly<T> 是 TypeScript 标准库中的映射类型。

这只是 TypeScript 泛型的一个简要介绍。泛型为 TypeScript 提供了强大的类型系统和代码重用能力。

相关文章:

TypeScript中的泛型

在 TypeScript&#xff08;简称 TS&#xff09;中&#xff0c;泛型&#xff08;Generics&#xff09;是一种允许你为组件&#xff08;如类、接口和函数&#xff09;定义灵活、可重用的类型的方式。泛型可以看作是一种类型参数化&#xff0c;允许你在声明时定义一个或多个类型占…...

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】

LeetCode-2779. 数组的最大美丽值【数组 二分查找 排序 滑动窗口】 题目描述&#xff1a;解题思路一&#xff1a;滑动窗口与排序解题思路二&#xff1a;0解题思路三&#xff1a;0 题目描述&#xff1a; 给你一个下标从 0 开始的整数数组 nums 和一个 非负 整数 k 。 在一步操…...

RIP与OSPF发布默认路由(华为)

#交换设备 RIP与OSPF发布默认路由 合理使用默认路由可以很大程度上减少本地路由表的大小&#xff0c;并可以较好的隐藏一个网络中的路由信息&#xff0c;保护自身网络的隐秘性 另外如果在同一个路由器两端使用了不同的路由协议&#xff0c;那么如果不做路由引入或者发布默认…...

Android 一个改善的okHttp封装库

Android Studio 使用前&#xff0c;对于Android Studio的用户&#xff0c;可以选择添加: compile project(‘:okhttputils’) 或者 compile ‘com.zhy:okhttputils:2.0.0’ Eclipse 自行copy源码。 二、基本用法 目前基本的用法格式为&#xff1a; OkHttpUtils .get()…...

瓦罗兰特低价区怎么下载 瓦罗兰特低价区下载教程+免费加速器推荐

瓦罗兰特是由拳头发行的游戏&#xff0c;以其丰富的游戏内容和刺激的竞技体验赢得了广大玩家的喜爱。于其它热门的射击游戏不一样的是&#xff0c;我们在游戏中可以选择不的英雄&#xff0c;每一个英雄都有着自己独特的技能&#xff0c;我们还可以在游戏中强行改变地形帮助我们…...

lspci总结

lspci总结 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将探讨一个在 Linux 系统中常用的命令&#xff1a;lspci。lspci 命令用于列出当前系统中的 P…...

Android开启HTTP服务

需求&#xff1a;通过手机给设备升级固件&#xff0c;设备有WIFI 方案&#xff1a;升级包放到APP可以访问的目录&#xff0c;手机开热点并启动一个HTTP服务&#xff0c;设备连接手机热点&#xff0c;另外&#xff0c;设备端开启一个 telnet 服务&#xff0c;手机通过 telnet 登…...

NLP - word2vec详解

Word2Vec是一种用于将词汇映射到高维向量空间的自然语言处理技术。由Google在2013年提出&#xff0c;它利用浅层神经网络模型来学习词汇的分布式表示。Word2Vec有两种主要模型&#xff1a;CBOW&#xff08;Continuous Bag of Words&#xff09;和Skip-gram。 1. 模型介绍 Con…...

AI办公自动化:用通义千问批量翻译长篇英语TXT文档

在deepseek中输入提示词&#xff1a; 你是一个Python编程专家&#xff0c;现在要完成一个编写基于qwen-turbo模型API和dashscope库的程序脚本&#xff0c;具体步骤如下&#xff1a; 打开文件夹&#xff1a;F:\AI自媒体内容\待翻译&#xff1b; 获取里面所有TXT文档&#xff…...

一键解压,无限可能——BetterZip,您的Mac必备神器!

BetterZip for Mac 是一款高效、智能且安全的解压缩软件&#xff0c;专为Mac用户设计。它提供了直观易用的界面&#xff0c;使用户能够轻松应对各种压缩和解压缩需求。 这款软件不仅支持多种压缩格式&#xff0c;如ZIP、RAR、7Z等&#xff0c;还具备快速解压和压缩文件的能力。…...

【数学】什么是最大似然估计?如何求解最大似然估计

背景 最大似然估计&#xff08;Maximum Likelihood Estimation, MLE&#xff09;是一种估计统计模型参数的方法。它在众多统计学领域中被广泛使用&#xff0c;比如回归分析、时间序列分析、机器学习和经济学。其核心思想是&#xff1a;给定一个观测数据集&#xff0c;找到一组…...

跟张良均老师学大数据人工智能|企业项目试岗实训开营

我国高校毕业生数量连年快速增长&#xff0c;从2021年的909万人到2022年的1076万人&#xff0c;再到2023年的1158万人&#xff0c;预计到2024年将达到1187万人&#xff0c;2024年高校毕业生数量再创新高。 当年高校毕业生人数不等于进入劳动力市场的高校毕业生人数&#x…...

Pentest Muse:一款专为网络安全人员设计的AI助手

关于Pentest Muse Pentest Muse是一款专为网络安全研究人员和渗透测试人员设计和开发的人工智能AI助手&#xff0c;该工具可以帮助渗透测试人员进行头脑风暴、编写Payload、分析代码或执行网络侦查任务。除此之外&#xff0c;Pentest Muse甚至还能够执行命令行代码并以迭代方式…...

10 SpringBoot 静态资源访问

我们在开发Web项目的时候&#xff0c;往往会有很多静态资源&#xff0c;如html、图片、css等。那如何向前端返回静态资源呢&#xff1f; 以前做过web开发的同学应该知道&#xff0c;我们以前创建的web工程下面会有一个webapp的目录&#xff0c;我们只要把静态资源放在该目录下…...

Unity 之通过自定义协议从浏览器启动本地应用程序

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity 之通过自定义协议从浏览器启动本地应用程序 TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进…...

Python抓取天气信息

Python的详细学习还是需要些时间的。如果有其他语言经验的&#xff0c;可以暂时跟着我来写一个简单的例子。 2024年最新python教程全套&#xff0c;学完即可进大厂&#xff01;&#xff08;附全套视频 下载&#xff09; (qq.com) 我们计划抓取的数据&#xff1a;杭州的天气信息…...

【超越拟合:深度学习中的过拟合与欠拟合应对策略】

如何处理过拟合 由于过拟合的主要问题是你的模型与训练数据拟合得太好&#xff0c;因此你需要使用技术来“控制它”。防止过拟合的常用技术称为正则化。我喜欢将其视为“使我们的模型更加规则”&#xff0c;例如能够拟合更多类型的数据。 让我们讨论一些防止过拟合的方法。 获…...

【Orange Pi 5与Linux内核编程】-理解Linux内核中的container_of宏

理解Linux内核中的container_of宏 文章目录 理解Linux内核中的container_of宏1、了解C语言中的struct内存表示2、Linux内核的container_of宏实现理解3、Linux内核的container_of使用 Linux 内核包含一个名为 container_of 的非常有用的宏。本文介绍了解 Linux 内核中的 contain…...

003.Linux SSH协议工具

我 的 个 人 主 页&#xff1a;&#x1f449;&#x1f449; 失心疯的个人主页 &#x1f448;&#x1f448; 入 门 教 程 推 荐 &#xff1a;&#x1f449;&#x1f449; Python零基础入门教程合集 &#x1f448;&#x1f448; 虚 拟 环 境 搭 建 &#xff1a;&#x1f449;&…...

web前端组织分析:深入剖析其结构、功能与未来趋势

web前端组织分析&#xff1a;深入剖析其结构、功能与未来趋势 在数字化浪潮的推动下&#xff0c;Web前端组织作为连接用户与数字世界的桥梁&#xff0c;其重要性日益凸显。本文将从四个方面、五个方面、六个方面和七个方面对Web前端组织进行深入分析&#xff0c;揭示其结构特点…...

Frida安装后别急着‘玩’!这5个必做的环境验证与排错步骤你做了吗?

Frida安装后必做的5个环境验证与排错步骤 当你兴冲冲地按照教程安装完Frida和Server&#xff0c;准备开始"玩耍"时&#xff0c;却发现frida-ps -U毫无反应&#xff0c;或者遇到各种连接失败的问题。这种"安装成功却用不了"的尴尬&#xff0c;往往源于环境…...

效率直接起飞!盘点2026年全网顶尖的AI论文工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂的AI论文工具&#xff0c;实测提速效果惊人&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版全流程&#xff0c;让你高效搞定论文&#xff0c;告别熬夜赶工。 一、全流程王者&#xff1a;一站式搞定论文全链路&…...

红外遥控技术原理与实现方案详解

红外遥控技术原理与实现方案1. 红外遥控技术概述红外遥控技术是一种利用红外光波进行短距离无线通信的技术方案&#xff0c;主要应用于家电控制领域。该技术通过调制红外光波来传输控制信号&#xff0c;具有成本低、实现简单、抗干扰能力强等特点。1.1 技术特点与应用场景红外遥…...

League-Toolkit 英雄联盟工具集完整教程:从新手到高手的效率革命

League-Toolkit 英雄联盟工具集完整教程&#xff1a;从新手到高手的效率革命 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在…...

具身智能:千亿赛道崛起、多元场景落地与数据标注协同发展

2025被称为“具身智能元年”&#xff01; “具身智能” 也首次被写入中国《政府工作报告》&#xff0c;纳入国家战略规划&#xff0c;各地密集出台专项政策布局赛道。 数据标注作为具身智能涌现的核心基石&#xff0c;也同步完成了从劳动密集型向高技术专业化的范式升级。 具…...

超越极限:YOLOv8融合Dynamic Head(统一尺度-空间-任务感知注意力)—— 原理详解、代码实现与性能验证

引言 在目标检测领域,YOLO系列模型凭借其出色的速度与精度平衡,始终占据着举足轻重的地位。YOLOv8作为Ultralytics团队的最新力作,在架构设计、训练策略和部署便捷性上均达到了新的高度。然而,随着应用场景的日益复杂,如何让模型在多尺度变化、空间遮挡、任务干扰等挑战下…...

STM32F407实战:手把手教你搞定永磁同步电机FOC电流环(附示波器调试避坑指南)

STM32F407实战&#xff1a;永磁同步电机FOC电流环深度优化与示波器调试全攻略 在电机控制领域&#xff0c;永磁同步电机(PMSM)的磁场定向控制(FOC)一直是工程师们关注的焦点。而电流环作为FOC控制中最核心的环节&#xff0c;其性能直接影响整个系统的响应速度和稳定性。本文将基…...

Proteus8.9 安装避坑指南:从下载到稳定运行的完整流程

1. 为什么选择Proteus8.9&#xff1f; Proteus作为电子设计自动化&#xff08;EDA&#xff09;领域的经典工具&#xff0c;在单片机仿真和电路设计方面一直备受工程师和学生青睐。8.9版本之所以成为众多用户的首选&#xff0c;主要在于它对新型单片机的支持更加完善。比如STC15…...

springboot基于Vue的大学生心理健康交流系统的设计与实现

目录系统架构设计数据库设计核心功能模块前端界面开发测试部署方案项目进度规划注意事项项目技术支持源码获取详细视频演示 &#xff1a;文章底部获取博主联系方式&#xff01;同行可合作系统架构设计 采用前后端分离架构&#xff0c;后端使用SpringBoot框架提供RESTful API接…...

别再傻傻分不清!STM32定时器里Prescaler和ClockDivision到底谁管心跳谁管滤波?

STM32定时器双频分频机制深度解析&#xff1a;从心跳节拍到信号滤波 第一次接触STM32定时器配置时&#xff0c;看到Prescaler和ClockDivision这两个参数&#xff0c;很多开发者都会产生疑惑——它们看起来都是在做"分频"这件事&#xff0c;为什么需要两个参数&#x…...