// 泛型
/*
泛型的关键目的是在成员之间提供有意义的约束,可以是
- 类的实例成员
- 类的方法
- 函数参数
- 函数返回值
*/
// 不使用泛型将只能规定特定类型
class Queue {
private data: number[] = []
push = (item: number) => this.data.push(item)
pop = () => this.data.shift
}
const queue = new Queue()
queue.push(1)
// 使用泛型
class Queue1<T>{
private data: T[] = []
push = (item: T) => this.data.push(item)
pop = (): T => this.data.shift() as any as T
}
const queue1 = new Queue1<number>()
queue1.push(32)
const queue2 = new Queue1<string>()
queue2.push('321')
console.log(queue1.pop()); // 32
console.log(queue2.pop()); // '321'
function reverse1<T>(items: T[]): T[]{
const toReturn:T[] = []
items.forEach(item => { toReturn.unshift(item) })
return toReturn
}
const reversed1 = reverse1([1, 2, 3, 4])
console.log(reversed1[0]);
reversed1[0] = 3
// reversed1[1] = '32' // error
class Utility{
reverse<T>(items: T[]): T[]{
const toReturn:T[] = []
items.forEach(item => { toReturn.unshift(item) })
return toReturn
}
}
/**
* 你可以随意调用泛型参数,当你使用简单的泛型时,泛型常用 T 、 U 、 V 表示。如果在你的
参数里,不止拥有一个泛型,你应该使用一个更语义化名称,如 TKey 和 TValue (通常情况
下,以 T 做为泛型前缀也在如 C++ 的其他语言里做为模版。
*/
Typescript 泛型归纳
最新推荐文章于 2023-06-23 07:24:56 发布