typescript中的泛型 <T>

850 words

泛型可在编码时传入,一般用大写字母 T 来指定。

🕵 简单的泛型使用

下面方法 toData 接受一个参数后处理成统一格式返回。由于参数的类型是不确定的,则接受一个泛型<T> 来确认参数类型。

1
2
3
4
5
6
7
8
9
10
/**
* 接受data参数并返回统一的格式
* @param data
*/
const toData = <T>(data: T) => {
return {
data,
msg: 'ok',
}
}

泛型的使用案例

调用方法时可传入一个类型进行约束

1
2
3
4
5
6
const result = toData<{ name: string }>({
name: '小明',
})

// 这里ts就可以推导出你的数据接口
console.log(result.data.name)

ts泛型自动推导

不传入类型也是可以的,typescript会自动根据泛型的和实参一一对应起来
ts泛型自动推导

💡 泛型还能用来获取类型

实现一个数组遍历方法,并获取到数组中子项的类型

如图所示,如果想获取到该数组中的所有子项类型(string|number|null)。 除了 infer 还可以使用泛型来获取
通过泛型获取类型

each 方法中, T[]告诉typescript,接受一个由数组包裹的泛型。 也可以写成 Array<T>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
const list = ['1', 2, null]

/**
* 传入一个可迭代的数组,并回调每一个子项
* @param list
* @param loopCb
*/
const each = <T>(list: T[], loopCb: (cur: T) => void) => {
for (let index = 0; index < list.length; index++) {
loopCb(list[index])
}
}

each(list, (cur) => console.log(cur))

ts each方法实现