装饰器:重载父类声明
小于 1 分钟
有时候在开发中,有一个通用的父类方法,但我们又想限制在不同的子类下需要不同的参数类型,为了重新获得语法提示这块糖,重载父类声明就很有必要了。下面实现:
/**重载父类函数声明 */
public reset_parent_declaration(target_a_: any, k_s_: string, descriptor_o_: PropertyDescriptor): void {
descriptor_o_.value = target_a_.__proto__[k_s_];
}
使用:
class A {
public func(str_s_: string): void {
cc.log(str_s_);
}
}
class B extends A {
@reset_parent_declaration
func(str_s_: "test1" | "test2"): void {}
}
let b = new B;
b.func("test1");
// 打印结果:"test1"
另外也可以手动调用 super 函数来实现