本文介绍泛型一些基础用法。
泛型
数组里泛型的运用
如下代码,如果传入的数值为string,则须把number改为any, 但这样一来就失去了类型检查的意义。此时泛型(generics)排上用场
1 | const last = (arr: Array<number>) => { |
last
函数须改为
1 | const last = <T>(arr: Array<T>): T => { |
- 当然,也可定义于多个参数
1 | const makeArr = <X, Y>(x: X, y: Y): [X, Y] => { |
以上代码还有骚操作写法:
1 | // 类似es6的默认值写法:Y泛型指定了泛型默认值, |
对象里泛型的应用
如下,指定了{}的两个属性,如果有多个属性一起传入,则会报错:
1 | const fullName = (obj: { firstName: string, lastName: string}) => { |
此时可以用泛型的 extends
关键字,扩展了原有obj,改写如下:
1 | const fullName = <T extends { firstName: string, lastName: string }> |
接口中泛型的应用
如下例子,可在 interface 里直接传入一个泛型 T,定义时利用 type 类型定义传入类型
1 | interface Tab<T> { |