申明定义的时候不指定类型,在使用再传递具体类型,不确定类型结果的时候使用;
1.常用简单列子:
// 普通类型:
function createNumberArray (length: number, value: number): number[] {
// length为number类型,不具备Array的fill方法,所以先指定length为泛型为Array<number>;
return Array<number>(length).fill(value);
}
createNumberArray(4, 8)
// 泛型:适用不同类型的不同返回;
function createdArray <T> (length: number, value: T): T[] {
return Array<T>(length).fill(value);
}
createdArray(3, 'P');
createdArray(4, 6);
2.泛型约束:让泛型在某个范围内;
// 未约束时:
function a <T>(x: T): void {
console.log(x.length); // 报错,因为不确定T使用时是否会有length属性;
}
// 约束时:
interface LengthWise {
length: number
}
function a <T extends LengthWise>(x: T): void {
console.log(x.length);
}
a('aaa');
a(111); // 编译时提示报错,数字没有length属性;