ts笔记-泛型
泛型用于在成员之间提供有意义的约束,这些成员可以是类的实例成员、类的方法、函数参数、函数返回值。
类
class Queue<T> {
private data: T[] = [];
push(item: T) {
this.data.push(item)
}
pop(): T | undefined {
return this.data.shift()
}
}
// 示例一
const queue = new Queue<number>();
queue.push(0);
queue.push('1'); // ERROR
// 示例二
const queue = new Queue<string>();
queue.push('0');
queue.push(1); // ERROR
number
做为类型传递给Queue,在内部可以使用T
表示该类型,并用于内部方法和属性的约束
类成员函数
class Utility {
reverse<T>(items: T[]): T[] {
const toreturn = [];
for (let i = items.length; i >= 0; i--) {
toreturn.push(items[i]);
}
return toreturn;
}
}
const a = new Utility()
const b = a.reverse<number>([1,23,'3']); // ERROR
配合Axios使用
import axios from 'axios'
// GET user
interface ResponseData<T = any> {
code: number;
result: T;
message: string;
}
export function getUser<T>() {
return axios.get<ResponseData<T>>('/user').then(res => res.data)
}
interface User {
name: string;
age: number;
}
async function test() {
// user 被推断出为
// {
// code: number,
// result: { name: string, age: number },
// message: string
// }
const user = await getUser<User>();
}
把类型User
当做一个参数,更容易理解泛型推倒的过程.
胖胖熊笔记,笔记已迁移