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

TypeScript模块增强:如何为接口条件添加属性?

解决方案

可以通过基于泛型条件的接口继承实现这个需求,让handleDateChange属性仅在LibraryObject extends MyCustomObject时被添加到Props接口中,代码如下:

declare module "library" {
  export interface Props<LibraryObject> 
    extends (LibraryObject extends MyCustomObject ? {
      handleDateChange: (arg: Date) => void;
    } : {}) {}
}

原理说明

  • 当LibraryObject满足extends MyCustomObject的约束时,接口会继承一个包含handleDateChange必选属性的对象类型,此时实现Props<LibraryObject>的对象必须提供该属性,无需额外检查。
  • 当LibraryObject不满足约束时,接口继承一个空对象类型,相当于没有添加任何额外属性,实现时完全不需要考虑handleDateChange,也不会触发编译器报错。

对比原方案的优势

  • 避免了原方案中never类型属性导致的强制传参问题(因为never类型无合法值可传入)。
  • 无需将属性设为可选,也就不用在使用MyCustomObject场景下显式检查属性是否存在,类型推导会直接确认该属性必存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:40:09