原文出处:https://www.jianshu.com/p/0affdae0c616
1、应用场景
前端需要对一个数据列表进行模型化(data-model),假设这个数据模型的类型是A,我希望将后端返回的json数组转化为类型A的列表即Array<A>(A[]),数据模型多种多样,其他页面的列表需要转化成B[],C[]等等,因此,我需要定义一个方法,这个方法能够将json数组(可视为Object array)转化成我想要的对象数组。对于这个问题我们可以用泛型来解决。
2、使用泛型创建工厂函数
在TypeScript使用泛型创建工厂函数时,需要引用构造函数的类类型。比如,
function create<T>(c: {new(): T; }): T {
return new c();
}
因为泛型不知道T是啥东西,是不是类也不明白,所以需要引用构造函数的类类型。
利用泛型创建工厂函数实现我上面说的场景,代码示例如下:
function create<T>(c: {new(): T; },dataArr:Object[]): T[] {
let dataModelArr: T[];
dataArr.forEach(item=>{
T.push(new T(item));
})
return dataModelArr;
}