泛型
参考资料
什么叫泛型?有什么作用?
TypeScript 中文手册-泛型(generic)
理解
泛型:把类型明确的工作推迟到创建对象或调用方法的时候才去明确的特殊的类型
1.比如下面这段代码,当对于参数和返回值没有特殊限制,只要求两者类型一致的时候,用泛型即可限制。
// 参数和返回值类型 相同 泛型 <T>表达函数中的参数类型一致
function generic<T>(arg:T):T{
console.log(arg);
return arg
}
generic('string')
2.下面这段代码,使用泛型变量限制了数组
// 让参数和返回值都是一种类型的数组 如纯数字或者含对象
function loggingIdentity<T>(arg: Array<T>): Array<T> {
console.log(arg.length); // Array has a .length, so no more error
return arg;
}
loggingIdentity([4])
泛型类
泛型类看上去与泛型接口差不多。 泛型类使用(<>)括起泛型类型,跟在类名后面。
class generic<T> {
arg:T;
add(x:T,y:T){
return T
};
}
let Generic=new generic<Number>()
Generic.arg=4
该泛型类规定了类型一致,实例化的时候用<Number>
进行限定
泛型约束
注意<T extends Lengthwise>
表示泛型受到了Lengthwise
接口的约束,即T必须拥有length
属性
interface Lengthwise {
length: number;
}
function loggingIdentity<T extends Lengthwise>(arg: T): T {
console.log(arg.length); // Now we know it has a .length property, so no more error
return arg;
}
loggingIdentity(3); // Error, number doesn't have a .length property