TS 泛型
2018-10-23 本文已影响0人
郑无穷大
定义
泛型就是用一个东西表示广泛的类型。
function returnIt<T>(sth: T):T {
return sth;
}
// 前面的<T>是声明泛型!
let returnIt2: <X>(sth: X) => X = returnIt;
// 上面俩种定义方法一样
let a = returnIt({ name: 'zheng',age: 18});
// 泛型,对比any就是保存了数据,一对一
function returnArray<T>(array: T[]): T[] { //T[] 可以写成Array<T>
return array;
}
// 数组的泛型,定义数组的类型
interface Human {
name: string;
age: number;
}
let b = returnArray<Huamn>([{name:'x',age:1},{name:'xx',age:2}])
let c:Array<string> = ['a','b'];
接口
interface add<T> {
(a: T,b: T): T;
}
let numberAdd: add<string> = (a2: string, b2: string): string => {
return a2 + b2;
}
泛型约束
就是给泛型添加一些约束。
function returnIt<T>(arg: T): T{
console.log(arg.length) // error
return arg;
}
添加约束之后
interface HasLength{
length: number
}
function returnIt<T extends HasLength>(arg: T): T{
console.log(arg.length) // no error
return arg;
}
// 类的泛型约束
function create<T>(c: {new():T}) {
return new c();
}
class Human{}
let jack = create<Human>(Human)