泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定。
泛型函数与泛型接口
function log<T>(value: T): T {console.log(value);return value;}log<string[]>(['a', 'b'])log(['a', 'b'])// 泛型函数的实现type Log = <T>(value: T) => Tlet myLog: Log = log// 泛型接口interface LogInterface<T = string> {<T>(value: T): T}let MyLog: LogInterface = logMyLog('i')
泛型类与泛型约束
泛型的好处:
- 函数和类可以轻松的支持多种类型,增强程序的扩展性
- 不必谢多条函数重载,冗长的联合类型声明,增强代码的可读性
- 灵活控制类型之间的约束
class Logg<T> {run(value: T) {console.log(value)return value}}let logg1 = new Logg<number>()logg1.run(1)let logg2 = new Logg()logg2.run('1')interface Length {length: number}function logg<T extends Length>(value: T): T {console.log(value, value.length)return value}logg([1])logg('123')logg({length: 1})
