TypeScript基于泛型通用接口扩展指定payload类型方案咨询
可行性说明
你给出的两种示例写法均不可行,原因如下:
interface interface15 extends IBase<interface15>会产生循环类型引用,同时你声明的code、message会成为接口的顶级属性,不会被识别为payload的内部字段,完全不符合结构要求。interface interface16 = IBase<{...}>属于语法错误,interface关键字定义接口不支持赋值语法,赋值是type类型别名的专属用法。
符合需求的实现方案
你可以通过单行关闭ESLint规则的方式,直接在泛型位置传入payload的字面量结构,不需要额外定义独立payload接口、不需要新增无用属性、也不需要使用类型别名:
interface IBase<T> { trackingId: string status: string payload: T } // eslint-disable-next-line @typescript-eslint/no-empty-interface interface interface15 extends IBase<{ code: string message: string }> {} // eslint-disable-next-line @typescript-eslint/no-empty-interface interface interface16 extends IBase<{ error: number message: string }> {}
如果可以调整项目ESLint规则,也可以直接给@typescript-eslint/no-empty-interface规则开启allowSingleExtends配置项,之后不需要加单行忽略注释即可直接使用上述写法。
内容的提问来源于stack exchange,提问作者Mauzzz0
相关产品推荐
相关产品推荐

