typescript泛型通过将类型作为参数传递实现高复用,支持单/多类型参数、extends约束及内置泛型组合,兼顾类型安全与灵活性。

在 TypeScript 中用泛型写高复用函数,核心是把“类型”当作参数来传递,而不是硬编码具体类型。这样一套逻辑就能适配 string、number、对象甚至自定义类型,既保留类型安全,又避免重复造轮子。
用 定义类型参数,让函数自己推断或显式指定
泛型函数以
- 写法示例:function first
(arr: T[]): T | undefined { return arr[0]; } - 调用时可省略类型标注,TypeScript 自动推导:first([1, 2, 3]) → 类型为 number
- 也可显式指定:first
(["a", "b"]) → 类型为 string
多个类型参数协同工作,处理更复杂结构
当函数涉及不同角色的类型(比如键和值、输入和输出),可用多个泛型参数,如
完整的Galileo AI平台 TypeScript/JS SDK 参考,用于评估、观察和保护 GenAI 应用。适用于构建 Node.js 或 TypeScript 项目。
- 例如映射对象字段:function mapKeys
(obj: Record , fn: (k: K) => string): Record - K 限定为字符串字面量(用 extends 约束),V 可任意,两者独立又关联
- 这样既能校验 key 合法性,又能保持 value 类型不丢失
用 extends 做泛型约束,确保安全访问属性
如果函数内部要读取 length 或 id 这类属性,不能假设所有类型都有——必须加约束,否则编译报错。
- 定义接口描述共性:interface HasLength { length: number; }
- 约束泛型:function logLength
(item: T): T { console.log(item.length); return item; } - 调用时只接受有 length 的类型:string、Array、{ length: 5 } 都行;number、boolean 就不行
配合数组、Promise、Record 等内置泛型,自然延伸复用能力
不必从零造轮子。TypeScript 已内置常用泛型容器,直接组合使用即可提升表达力。
-
Array
:明确数组元素类型,避免 any[] -
Promise
:异步函数返回值类型可精准追踪,比如 fetchUser(): Promise -
Record
:构造键值对对象,Record 比手动写 interface 更灵活
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










