设计泛型的关键⽬的是在成员之间提供有意义的约束,这些成员可以是:类的实例成员、类的⽅法、函
数参数和函数返回值。
泛型(Generics)是允许同⼀个函数接受不同类型参数的⼀种模板。
相⽐于使⽤ any 类型,使⽤泛型来创建可复⽤的组件要更好,因为泛型会保留参数类型。
**
console.log(identity<Number,String>(68, 'hello')); // 为类型变量显式设定值
==== 等价于
console.log(identity(68, 'hello'));// 省略尖括号,利用编译器自动选择这些类型
// 编译器⾜够聪明,能够知道我们的参数类型,并将它们赋值给 T 和 U,不需要开发⼈员显式指定它们
为什么需要泛型?
==>
比如定义一个函数,入参为number,但是现在想把这个函数扩展为适合任一类型的
如果把入参改为any就会出去校验的功能,此时泛型T就适合登场了
泛型接口
interface GenericIdentityFn<T> {
(arg: T): T
}
泛型类
class GenericNumber<T> {
zeroValue: T;
add: (x: T, y: T) => T;
}
let myGenericNumber = new GenericNumber<number>();
myGenericNumber.zeroValue = 0;
myGenericNumber.add = (x, y) => x + y;