说说对Typescript中泛型的理解
# 是什么
泛型: 泛指的数据类型
function fn(param: number): number {
return param;
}
function fn(param: string): string {
return param;
}
function fn<T>(param: T):T {
return param
}
# 怎么用
使用场景:
函数
接口
类
# 函数
function fn<T>(param: T):T {
return param
}
// 多参数
function fn<T, U>(param: [T, U]):[U, T] {
return [param[1], param[0]]
}
# 接口
interface IFn<T> {
(param:T): T
}
const fn:IFn = data => data
# 类
class Fn<T> {
private arr:T[] = []
public push(item:T){
this.arr.push(item)
}
public pop(){
this.arr.pop()
}
}
const f = new Fn<string>()
f.push('hello')
# 约束类型
// 约束了只能是字符串或者是数字
type P = string | number
class Fn<T extends P> {
private arr:T[] = []
public push(item:T){
this.arr.push(item)
}
public pop(){
this.arr.pop()
}
}
const f = new Fn<string>()
f.push('hello')
# 索引类型
function fn<T extends object, U extends keyof T>(obj: T, key: U) {
return obj[key] // ok
}
const obj = {
name:'fang'
}
fn(obj, 'name') // fang
fn(obj, 'name1') // 报错
上次更新: 2021/12/19, 18:05:42