泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定。
为什么要使用泛型
function log(value: string) {
console.log(value);
return value;
};
假定如上log函数,还要支持字符串数组,应该如何实现,下面是两种做法
function log(value: string): string;
function log(value: string[]): string[];
function log(value: any): any {
console.log(value);
return value
}
function log(value: string | string[]): string | string[] {
console.log(value);
return value;
};
function log(value: any): any {
console.log(value);
return value;
};
使用泛型不会丢失具体类型,同时更具备扩展性。使用泛型可以指定类型,也可以交给类型推断:
function log<T>(value: T): T {
console.log(value);
return value;
};
log<string[]>(['abc']);
log(['abc']);
log<string[]>(['abc', 123]); // Type 'number' is not assignable to type 'string'.
type和interface定义泛型
type Log = <T>(value: T) => T;
const myLog: Log = log;