function fun(a:any):any{
return a;
}
在定义函数或者类时,遇到类型不明确就可以使用泛型。
function fn<T>(a: T): T {
return a;
}
// 可以直接调用具有泛型的函数
const res1 = fn(10) //不指定泛型,TS可以自动对类型进行推断(但并不能推断出所有类型)
const res2 = fn<string>('hello') //指定泛型
// 泛型可以指定多个
function fn2<T, K>(a: T, b: K): T {
console.log(b);
return a;
}
fn2(123, 'hello')
// 这些情况下泛型T的范围太广了,有的时候我们需要指定范围的泛型
interface Inter {
length: number;
}
// T extends Inter 表示T必须是Inter的实现类(子类)
function fn3<T extends Inter>(a: T): number {
return a.length
}
// fn3(123);//报错
fn('123')
// 泛型除了用在函数里还能用在类中
class MyClass<T>{
constructor(public name: T) {}
}
const mc =new MyClass<string>("张三")
T 是自己起的名字可以随意起名,这里我用type首字母T作为示范