TypeScript:12、泛型
泛型泛型用于编写类型安全、可复用的函数、类和接口。当代码逻辑相同但具体类型不确定时泛型可以代替不安全的any。一、为什么需要泛型下面的写法虽然可以接受任意类型但会失去类型信息functiontest(arg:any):any{returnarg;}constresulttest(hello);使用any的问题是参数和返回值之间的类型关系没有被表达出来调用者也无法得到准确的类型提示。二、泛型函数使用尖括号声明类型参数functionidentityT(value:T):T{returnvalue;}T是类型参数的名字表示某一个暂时还没有确定的类型。调用函数时TypeScript 会根据参数自动推断TconstnumberValueidentity(100);conststringValueidentity(hello);推断结果numberValue → number stringValue → string三、手动指定泛型类型当编译器无法准确推断或者希望明确表达意图时可以手动指定类型constvalueidentitynumber(100);constmessageidentitystring(hello);泛型名称不一定必须叫T但T、K、V是常见命名方式。四、多个泛型参数一个函数可以同时使用多个泛型参数functiongetSecondT,K(first:T,second:K):K{returnsecond;}constresultgetSecondnumber,string(100,hello);这里T表示第一个参数的类型。K表示第二个参数的类型。返回值类型和第二个参数类型保持一致。五、泛型数组泛型可以描述数组中元素的类型functiongetFirstT(items:T[]):T|undefined{returnitems[0];}constfirstNumbergetFirst([1,2,3]);constfirstNamegetFirst([Tom,Jerry]);这样传入数字数组时返回数字传入字符串数组时返回字符串。六、泛型类类也可以声明泛型classBoxT{prop:T;constructor(prop:T){this.propprop;}}constnumberBoxnewBoxnumber(100);conststringBoxnewBoxstring(hello);BoxT可以根据实例化时传入的类型保存不同类型的数据。七、泛型接口接口也可以使用泛型interfaceResponseDataT{code:number;data:T;}constuserResponse:ResponseData{name:string}{code:200,data:{name:孙悟空}};泛型接口适合描述“外层结构固定内部数据类型不同”的返回结果。八、泛型约束泛型默认可以代表任意类型。如果希望限制泛型范围可以使用extendsinterfaceHasLength{length:number;}functiongetLengthTextendsHasLength(value:T):number{returnvalue.length;}getLength(hello);getLength([1,2,3]);T extends HasLength表示T必须满足HasLength的结构也就是必须具有length属性。下面的调用会报错// getLength(100);因为数字没有length属性。九、泛型和 any 的区别对比项any泛型是否保留类型信息通常不保留保留是否进行类型检查大幅削弱保持是否表达参数和返回值关系不能准确表达可以表达适合场景临时兼容旧代码编写通用类型安全代码示例functionunsafe(value:any):any{returnvalue;}functionsafeT(value:T):T{returnvalue;}十、泛型使用建议泛型名称要能表达用途简单场景可以使用T。不要为了使用泛型而使用泛型类型关系明确时才使用。泛型约束应该尽量表达函数真正需要的能力。能自动推断时不必重复手动传入类型参数。不要用any替代可以表达的泛型关系。十一、常见问题1. 把泛型当成运行时变量泛型只存在于编译阶段运行时不会根据T自动创建数据或执行转换。2. 泛型约束写得过于宽泛如果函数需要访问length就应该用具有length的接口约束而不是让函数参数使用any。3. 泛型参数之间没有关系如果两个泛型参数完全没有关联应考虑是否真的需要同时声明。泛型的价值在于表达类型之间的关系。十二、本章小结泛型可以在不确定具体类型时保留类型安全。泛型函数使用function fnT()形式声明。泛型可以用于函数、类、接口和数组。extends可以约束泛型必须满足某种结构。泛型比any更适合编写可复用代码。

相关新闻

SQL Developer连接MySQL配置指南:统一数据库管理工具链实践

SQL Developer连接MySQL配置指南:统一数据库管理工具链实践

1. 从Oracle工具到MySQL:为什么选择SQL Developer? 作为一名常年与各种数据库打交道的开发者,我经常需要在不同的数据库环境之间切换。Oracle SQL Developer,这个由Oracle官方出品的免费图形化工具,因其对Oracle数据库…

2026/8/15 10:03:32 阅读更多 →
改性 EPDM 材料提升耐介质性能:盖茨皮带工业传动底层材料设计研究

改性 EPDM 材料提升耐介质性能:盖茨皮带工业传动底层材料设计研究

摘要工业传动皮带长期暴露于高温湿热、臭氧辐照、酸碱水汽、粉尘腐蚀等复杂介质环境,橡胶基体发生溶胀、硬化、表层龟裂、层间剥离,是皮带提前失效的核心诱因之一。氯丁橡胶(CR)等传统橡胶耐候短板突出,难以适配洁净自…

2026/8/16 12:04:54 阅读更多 →
从1到100阶乘计算:大数处理、算法优化与实用实现指南

从1到100阶乘计算:大数处理、算法优化与实用实现指南

1. 项目概述:从“算着玩”到“算明白”的阶乘探索最近在整理一些算法和数学相关的资料时,发现一个看似简单却常被忽略的基础问题:如何系统地计算并展示1到100的阶乘。你可能觉得,这有什么难的?不就是从1乘到100吗&…

2026/8/15 10:03:32 阅读更多 →

最新新闻

Python 面向对象编程深度剖析:从底层模型到架构设计

Python 面向对象编程深度剖析:从底层模型到架构设计

一、面向对象编程的本质:从数据抽象到行为封装1.1 范式的演进:从过程到对象的思维跃迁面向对象编程(Object-Oriented Programming, OOP)是软件工程领域最具影响力的编程范式之一,其核心思想在于将现实世界中的实体映射…

2026/8/16 12:05:17 阅读更多 →
Diablo Edit2完整指南:快速打造暗黑破坏神2终极角色的免费开源编辑器

Diablo Edit2完整指南:快速打造暗黑破坏神2终极角色的免费开源编辑器

Diablo Edit2完整指南:快速打造暗黑破坏神2终极角色的免费开源编辑器 【免费下载链接】diablo_edit Diablo II Character editor. 项目地址: https://gitcode.com/gh_mirrors/di/diablo_edit 你是不是也有过这种瞬间:心血来潮想换个 build 试试手…

2026/8/16 12:05:17 阅读更多 →
Zotero自动化标签管理终极指南:Actions  Tags插件免费搞定文献整理

Zotero自动化标签管理终极指南:Actions Tags插件免费搞定文献整理

Zotero自动化标签管理终极指南:Actions & Tags插件免费搞定文献整理 【免费下载链接】zotero-actions-tags Customize your Zotero workflow. 项目地址: https://gitcode.com/gh_mirrors/zo/zotero-actions-tags 深夜十一点,你刚导入今天下载…

2026/8/16 12:05:17 阅读更多 →
量化交易数据分析与策略开发实战指南

量化交易数据分析与策略开发实战指南

1. 量化交易的数据分析基础 1.1 量化交易的核心数据需求 量化交易的数据分析始于对市场数据的全面理解。我们需要收集和处理三类核心数据:行情数据(tick级、分钟级、日级)、基本面数据(财务报表、行业指标)和另类数据…

2026/8/16 12:05:17 阅读更多 →
Windows Telnet客户端:网络端口连通性测试与排错实战指南

Windows Telnet客户端:网络端口连通性测试与排错实战指南

1. 从“古老”到“实用”:为什么今天还要了解Telnet? 在图形化界面和各类高级网络诊断工具层出不穷的今天,提到Telnet,很多人的第一反应可能是“这不是个上古协议吗?”。确实,Telnet作为一个诞生于1969年的…

2026/8/16 12:05:17 阅读更多 →
具身智能VLA模型实战:从环境搭建到仿真部署全流程解析

具身智能VLA模型实战:从环境搭建到仿真部署全流程解析

1. 从“骂战”到“新剧本”:具身智能的VLA转向到底在解决什么? 如果你最近关注机器人或者AI领域,可能会被“具身智能”、“VLA”、“世界模型”这些词刷屏。半年前,行业里还在争论技术路线,是纯强化学习、纯视觉&#…

2026/8/16 12:04:17 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →