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

能否扩展服务并覆盖其名称声明?Angular CDK Overlay重写疑问

关于Angular CDK Overlay服务覆盖的问题

这种直接定义class Overlay extends Overlay的方式不可行,原因如下:

  • TypeScript语法层面不允许类继承自身,这样写会直接抛出循环继承的语法错误,无法通过编译。
  • 就算绕开语法问题,Angular依赖注入是基于令牌(Token)工作的:原Overlay是Angular CDK提供的注入令牌,你自定义的类如果同名,会导致导入时的命名冲突——代码里的Overlay到底指向CDK的类还是你自己的类?这会引发歧义甚至运行时错误。

你原来的实现方式已经完全满足“注入Overlay时拿到自定义服务”的需求:

// 自定义服务
@Injectable({
  providedIn: 'root'
})
export class MyOverlayService extends Overlay { 
  // 你的自定义逻辑
}

// 注入配置(app.module.ts或其他providers配置处)
{
  provide: Overlay,
  useClass: MyOverlayService
}

这个配置会让Angular的DI系统在所有请求Overlay令牌的地方,都返回MyOverlayService的实例,和你想要的“完全覆盖”效果一致,没必要尝试同名类的写法。

内容的提问来源于stack exchange,提问作者Riccardo Fachin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 06:28:22