泛型:不预先确定的数据类型,具体的类型在使用的时候才能确定。
泛型函数与泛型接口
function log<T>(value: T): T {
console.log(value);
return value;
}
log<string[]>(['a', 'b'])
log(['a', 'b'])
// 泛型函数的实现
type Log = <T>(value: T) => T
let myLog: Log = log
// 泛型接口
interface LogInterface<T = string> {
<T>(value: T): T
}
let MyLog: LogInterface = log
MyLog('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})