如何在TypeScript中不继承类就创建实例并覆写方法
问题:简化类实例化时的方法覆写方式
现有类定义
我们有如下两种类定义:
普通类实现接口
interface I { method1?: () => void } class A implements I { method1?: () => void }
抽象类实现接口
abstract class A implements I { abstract method1?: () => void }
需求
希望允许用户创建类A的实例时,能够便捷地覆写其中的method1方法。
当前使用的实现方式
目前我采用的是在构造函数中接收接口实例并赋值的方式:
class A implements I { constructor(v: I){ if(v.method1){ this.method1 = v.method1; // 用用户提供的方法覆写 } } method1?: () => void }
对应的使用方式:
const x = new A({ method1(){/* 自定义逻辑 */} })
这种方式虽然可行,但需要编写额外的构造函数赋值代码,当类中的方法数量较多或频繁变更时,很容易出现遗漏或错误。
排除的方案
我明确不希望使用以下两种方案:
- 依赖
abstract关键字的抽象类方案 - 语法繁琐且不易记忆的匿名子类继承写法:
const x = new (class extends A { method1(){} })()
寻求替代方案
请问是否存在其他更简洁、易维护的替代方案,能够满足在实例化类A时便捷覆写指定方法的需求?
内容的提问来源于stack exchange,提问作者Alexander Mills
相关产品推荐
相关产品推荐

