You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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(){/* 自定义逻辑 */}
})

这种方式虽然可行,但需要编写额外的构造函数赋值代码,当类中的方法数量较多或频繁变更时,很容易出现遗漏或错误。

排除的方案

我明确不希望使用以下两种方案:

  1. 依赖abstract关键字的抽象类方案
  2. 语法繁琐且不易记忆的匿名子类继承写法:
const x = new (class extends A {
    method1(){}
})()

寻求替代方案

请问是否存在其他更简洁、易维护的替代方案,能够满足在实例化类A时便捷覆写指定方法的需求?

内容的提问来源于stack exchange,提问作者Alexander Mills

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 14:12:38