突然想对之前写的 JSBridge 用 TS 重构一下,顺便简化一下整体结构。TS 的强类型是有了,但是还是存在着不足,导致相比其他强类型语言,稍微显得有点蹩脚。

比如创建一个抽象类的匿名内部类对象,就没法像 Java 那样,幸好基于 JS 本身的一些特点还是达到这个效果,看代码;

1
2
3
4
abstract class SuperClazz {
public constructor(readonly msg: string) { }
public abstract hello(): void;
}

在调用的地方我们通过 自执行函数 来创建子类对象:

1
2
3
4
5
6
7
8
9
10
11
let msg = 'asd';
((msgParam: string) => {
return new class SubClazz extends SuperClazz {
constructor(msg) {
super(msg);
}
public hello(): string {
return msg;
}
}(msgParam);
})(msg);


当时被这个问题卡了一小会,想到这个后马上就小本本记下来了。然后联想到其实 Java 也是可以在函数里面定义类的,只是因为一般都用匿名内部类的语法,所以一般也很难想到在函数体内定义一个类。