TypeScript:如何从实例在运行时泛型获取所属类引用
解决方案:动态获取实例所属类的静态TYPE属性
我来帮你搞定这个问题!你需要让父类的type getter动态返回当前实例所属类的静态TYPE属性,而不是固定引用父类的。核心思路是利用this.constructor获取实例的实际构造函数,进而访问它的静态属性。
修改后的父类代码
export class TypedAction implements Action { static TYPE = [NONE]; get type(): string { // 通过this.constructor获取当前实例的构造函数,断言类型以访问静态TYPE return (this.constructor as typeof TypedAction).TYPE; } }
为什么这样可行?
this.constructor会指向当前实例的实际构造函数:当你创建LoginRequestAction的实例时,this.constructor就是LoginRequestAction类本身,而非父类TypedAction。- 类型断言
as typeof TypedAction是为了让TypeScript识别这个构造函数拥有TYPE静态属性,避免编译报错。因为TypeScript默认认为this.constructor是Function类型,无法直接访问静态属性。
子类验证
对于你的LoginRequestAction子类,当你创建实例并访问type属性时:
const loginAction = new LoginRequestAction({ username: 'test', password: '123' }); console.log(loginAction.type); // 输出: '[Auth] Login requested'
完全符合你要求的“子类返回自身类的TYPE静态属性”的逻辑。
内容的提问来源于stack exchange,提问作者Jem
相关产品推荐
相关产品推荐

