如何动态创建Typescript类?
前言
想做一个工厂模式,之前写JAVA的时候使用“反射”可以轻松的完成动态创建,使用TypeScript的时候发现突然不知道怎么下手了!于是查阅各种资料 也没有找到理想的答案! 现如今得到了一个妥善的方法分享给大家,一起看看吧!如果有更好的办法,请不吝赐教!
思路图
先来个拙劣的小图表达一下思路,代码才是程序员之间的共同语言,不必纠结此图,也可先看代码再返回来看这个
代码
User 如何动态的创建类 (调用示例)
export class User{
constructor() {
// 因为创建的是ProxyClass 类型 所以需要 as 进行类型断言
// 这样ts就可以进行友好提示了!
let aClss=new ProxyClass('AClass') as AClass;
let bClss=new ProxyClass('BClass') as BClass;
let cClss=new ProxyClass('cClass') as CClass;
}
}
ProxyClass 实现一个代理类(具体实现)
export class ProxyClass {
/**
* 代理构建方法
* @param className 动态类名称
* @param option 动态类创建参数
*/
constructor(className: string, option?:any) {
//一个简单的异常判断,如果存储类中不存在此类 则抛出异常提醒
if (Storage[className] === undefined || Storage[className] === null) {
throw new Error(`未找到 className:${className} 对应实现`);
}
//从存放对象上找出对应class 创建即可
return new Storage [className](option)
}
}
Storage 实现不同的class存放(具体实现)
//AClass示例
export class AClass{
constructor() {
console.log('say hello my name is AClass');
}
}
//BClass示例
export class BClass{
constructor() {
console.log('say hello my name is BClass');
}
}
//CClass示例
export class CClass{
constructor() {
console.log('say hello my name is CClass');
}
}
//统一导出
export const Storage ={AClass, BClass, CClass}
注意
在js代码压缩的情况下可能会发生错误
请根据项目框架,打包特性,慎重使用此类型代码风格!
俗话说的好,授人与鱼,不如授之于渔,我是买教程学的更成体系。最近学Typescript小伙伴,扫码我免费送你!