泛型<T>的三个位置解析
functiongetFirst<T>(list:T[]):T{returnlist[0];}// ① ② ③三个T的含义
①<T>—— 类型参数声明
这是声明一个类型变量T,类似于函数参数列表(a, b)是声明值参数。
告诉 TypeScript:「我接下来要用一个叫
T的类型,它是什么类型现在还不知道,等调用时再确定。」
②list: T[]—— 参数类型
使用T,表示参数list是一个T类型的数组。
③: T——返回值类型
冒号后面的T表示函数的返回值类型是T。
也就是说:传入的数组里元素是什么类型,返回值就是什么类型。
类比普通函数理解
对比一下普通函数的写法你就明白了:
functiongetFirst(list:number[]):number{returnlist[0];}// ↑ 返回值类型泛型版本只是把具体类型number换成了一个「占位符」T:
functiongetFirst<T>(list:T[]):T{// ↑声明 ↑使用 ↑使用(作为返回类型)returnlist[0];}调用时发生了什么
constn=getFirst([1,2,3]);// T 被推断为 number,返回 numberconsts=getFirst(["a","b","c"]);// T 被推断为 string,返回 stringconstb=getFirst<boolean>([true]);// 显式指定 T = boolean总结对照表
| 位置 | 写法 | 作用 |
|---|---|---|
| ① | <T> | 声明类型参数 |
| ② | list: T[] | 使用T 描述参数类型 |
| ③ | : T | 使用T 描述返回值类型 |
简单记忆:尖括号里的T是定义,其他地方的T都是使用。
后记
2026年5月21日于上海,在claude opus 4.7辅助下完成。