从零学TypeScript-08 | 青训营笔记

54 阅读1分钟

这是我参与「第五届青训营 」笔记创作活动的第13天

创建泛型函数:

function id<Type>(value: Type): Type { return value }
  1. 语法:在函数名称的后面添加<>(尖括号),尖括号中添加类型变量,比如此处的Type。
  2. 类型变量Type,是一种特殊类型的变量,它处理类型而不是值。
  3. 该类型变量相当于一个类型容器,能够捕获用户提供的类型(具体是什么类型由用户调用该函数时指定)。
  4. 因为Type是类型,因此可以将其作为函数参数和返回值的类型,表示参数和返回值具有相同的类型。
  5. 类型变量Type,可以是任意合法的变量名称。

调用泛型函数:

function id<Type>(value: Type): Type { return value }
const num: number const num = id<number>(10)
const str: string const str = id<string-('a')
  1. 语法:在函数名称的后面添加<>(尖括号),尖括号中指定具体的类型,比如,此处的number。
  2. 当传入类型number后,这个类型就会被函数声明时指定的类型变量Type捕获到。
  3. 此时,Type 的类型就是number,所以,函数id参数和返回值的类型也都是number。

同样,如果传入类型string,函数 id参数和返回值的类型就都是string。

这样,通过泛型就做到了让id函数与多种不同的类型一起工作,实现了复用的同时保证了类型安全。

简化调用泛型函数:

function id<Type>(value: Type): Type { return value
let num: number let num = id<number>(10)
let num: number let num = id(10)
  1. 在调用泛型函数时,可以省略<类型>来简化泛型函数的调用。
  2. 此时,TS内部会采用一种叫做类型参数推断的机制,来根据传入的实参自动推断出类型变量Type的类型。
  3. 比如,传入实参10,TS会自动推断出变量num的类型number,并作为Type的类型。

推荐使用这种简化的方式调用泛型函数,使代码更短,更易于阅读。

当编译器无法推断类型或者推断的类型不准确时,就需要显式地传入类型参数。