主题
泛型
泛型(Generics)
在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性
typescript
// 函数
function swap<T, U>(tuple: [T, U]): [U, T] {
return [tuple[1], tuple[0]]
}
const result = swap(['string', 123]) // [123, 'string']
typescript
// 接口
interface KeyPair<T, U> {
key: T;
value: U;
}
let kp1: KeyPair<number, string> = { key: 1, value: "str" }
typescript
// 类
class Queue<T> {
private data = [];
push(item: T) {
return this.data.push(item)
}
pop(): T {
return this.data.shift()
}
}
const queue = new Queue<number>()
泛型约束(extends)
通过 extends
一个接口,来约束泛型
typescript
interface IWithLength {
length: number;
}
function echoWithLength<T extends IWithLength>(arg: T): T {
console.log(arg.length)
return arg
}
echoWithLength('str')
echoWithLength({length: 10})
echoWithLength(13) // 报错,因为他没有length属性