TypeScript报错:父类定义属性子类定义为函数的问题咨询
问题解析与解决
报错原因
TypeScript对类的属性和方法的类型定义做了严格区分:
- 抽象基类
Entity中,method被声明为函数类型的实例属性:abstract method: () => void - 继承的匿名子类中,
method被定义为类的实例方法:method(): void {}
这两种定义在TypeScript类型系统中属于不同的成员类型,因此触发类型不匹配报错。
解决方法
有两种规范一致的写法可选:
方法一:将基类改为抽象方法定义
把基类里的属性声明改成抽象方法,与子类写法对齐:
export abstract class Entity { abstract method(): void; // 改为抽象方法 } const e = new (class extends Entity { method(): void { return; } });
方法二:将子类改为属性形式定义
把子类的方法改成函数属性写法,与基类声明对齐:
export abstract class Entity { abstract method: () => void; } const e = new (class extends Entity { method = () => { // 改为函数属性 return; } });
注意:第二种写法会让method成为实例的自有属性(而非原型链上的方法),若涉及类继承、方法重写场景,需根据实际需求选择。
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

