typescript泛型核心是让类型关系可追踪、可约束、可推导;通过t等类型变量保持输入输出一致,用多个泛型参数处理结构化数据,extends约束安全操作,组合内置泛型减少重复定义。

在 TypeScript 中用泛型写高复用函数,关键不是“支持多种类型”,而是让类型关系可追踪、可约束、可推导。一套逻辑跑通 string、number、对象、Promise,不靠 any,也不靠类型断言,靠的是把“类型”当作参数来设计。
用 声明类型变量,保持输入输出一致
最基础也最常用:用
- 写法示例:function first
(arr: T[]): T | undefined { return arr[0]; } - 调用 first([1, 2, 3]) → 返回值类型是 number | undefined
- 调用 first([{id: 1}, {id: 2}]) → 返回值类型是 { id: number } | undefined
- 避免写 function first(arr: any[]): any —— 类型信息全丢,后续无法校验
用多个泛型参数处理结构化数据
当函数涉及不同角色的类型(比如键、值、输入、输出),单个 T 不够用,就上
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 映射对象字段:function mapKeys
(obj: Record , fn: (k: K) => string): Record - K 限定为字符串字面量(如 "name" | "age"),V 可任意,两者独立又关联
- 这样既能防止传入非法 key,又能保留 value 的原始类型
- 类似场景:Promise
、Array 、Map 都是天然多参泛型结构
用 extends 加约束,只允许安全操作的类型
不能假设所有类型都有 length、id 或 then 方法。想访问某个属性?先用 extends 锁定共性。
- 定义共性接口:interface HasLength { length: number; }
- 加约束写法:function logLength
(item: T): T { console.log(item.length); return item; } - 合法调用:logLength("hello")、logLength([1,2])、logLength({length: 5})
- 非法调用:logLength(42) → 编译报错,因为 number 没有 length 属性
组合内置泛型,少造轮子多表达
TypeScript 已提供大量开箱即用的泛型工具,直接嵌套使用就能应对复杂需求。
-
Record
描述键值对对象,比 { [key: string]: any } 精准得多 -
Partial
、Required 、Pick 是映射类型,适合构造 API 参数或响应体 - 异步函数返回 Promise
,能让 await 后的值类型自动推导:async function fetchUser(): Promise - 不必自己写 type MyArray
= { [index: number]: T } —— 直接用 Array更标准、更易维护
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










