五、泛型
小于 1 分钟约 293 字
(一)什么时候用
- 在定义函数或是类时,如果遇到类型不明确就可以使用泛型
- 类型在调用时确定
// 使用any会跳过TS的类型检查,不安全
function fn(a: any): any {
return a;
}
// T即是泛型
function fn<T>(a: T): T {
return a;
}
(二)怎么使用
- 可以直接调用具有泛型的函数
- 不指定泛型,TS 可以自动对类型进行判断(不是所有类型都可以判断出来)
- 指定泛型,以指定类型为准
// T类型变为number
fn(10);
// T类型变为string
fn<string>("Hello");
(三)进阶
1.指定多个泛型
function fn2<T, K>(a: T, b: K): T {
console.log(b);
return a;
}
fn2<number, string>(123, "Hello");
2.限定泛型的类型范围
T extends Inter
表示泛型T
必须是Inter
的实现类(子类)
interface Inter {
length: number;
}
function fn3<T extends Inter>(a: T): number {
return a.length;
}
fn3("123");
fn3(123); // 报错,因为number没有length属性
3.定义类时使用泛型
class MyClass<T> {
name: T;
constructor(name: T) {
this.name = name;
}
}
const mc = new MyClass<string>("Alice");
console.log(mc);