泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定。
为什么要使用泛型
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;
