TypeScript如何动态加载,获取一个类对象(解决方案)

自从使用TypeScript之后,发现对比JS,确实会有不少优势。但是在编码的过程中,也会遇到一些需求比较麻烦。这里分享几个使用经验
1.动态import一个类
不知道有没有朋友做大厅+多子游戏的类型,我们在开发过程中,把所有的业务逻辑都继承于同一个叫BaseGameLogic的类,那么问题来了,我想动态创建的类对象的时候,我如何通过类的名字import这个类对象呢,可能有人会说,我们可以用工厂模式呀!是的,这个方法在常规情况下确实是一个行之有效的解决方案,但是问题来了,如果我是把子游戏他为子包了,会有什么情况呢?这时候你们会发现,工厂模式是要把所有的类都import进去,但是子包的代码是独立的,甚至可能不在本地。这种情况下,就会出现代码加载错误的问题,所以这边推荐动态加载的功能,可以动态的去加载一个类。
let dynamicPath = gameName + “Logic”;
import(dynamicPath).then(Logic => {
this.GameLogic = new LogicdynamicPath;
});
其中dynamicPath为目标类的名字,不需要提供完整路径

2.第一步完成了,已经可以动态的实现创建对象,但是我应该怎么去调用对应游戏的这个gameLogic呢,下面就是解决方法,实际上可以通过查看Creator获取组件的形式来处理。比如说我有个游戏叫ExampleGame,我获取 对应的游戏逻辑方式为:
    public GetLogic<T extends BaseGameLogic>(type: {prototype: T}) : T {
        return (<T>this.GameLogic);
    }

然后我们就可以使用GetLogic(ExampleGameLogic).XXXX()的方式来调用对应logic下的函数了。当然,也可以暴力的通过显示转换来实现,不过代码的优雅性就不如这种了。(附:(ExampleGameLogic)this.GameLogic).XXXX())

不错哦~~

:innocent:没太懂,
GetLogic(ExampleGameLogic).XXXX()的时候是不是仍需要import ExampleGameLogic

这个是你在对应游戏里使用的时候才需要引入,其他游戏不相关