TypeScript报TS2428错误原因咨询:同名接口类泛型参数问题
错误原因分析
TS2428错误的核心原因是:你同时声明了同名的泛型接口PromotionController和泛型抽象类PromotionController,TypeScript要求所有同名的泛型声明(无论类型是接口还是类)必须拥有完全一致的类型参数定义,包括参数数量、名称、约束规则和默认值的每一处细节。
虽然你的代码中两者的泛型参数写法看起来一致,但TypeScript对同名泛型实体的合并声明有严格校验逻辑——类和接口属于不同的声明类型,即使泛型参数表面一致,也会被判定为不符合“完全相同”的要求。
正确的做法是将接口和类使用不同名称,让抽象类实现该接口,示例代码如下:
interface HookableTrait {} type promotionMeta = any; // 定义独立的接口 interface PromotionControllerInterface<TPromotionData extends promotionMeta = any, TTransferData extends any = any, TSerializableObject extends object = object> extends HookableTrait {} // 抽象类实现接口 abstract class PromotionController<TPromotionData extends promotionMeta = any, TTransferData extends any = any, TSerializableObject extends object = object> implements PromotionControllerInterface<TPromotionData, TTransferData, TSerializableObject> {}
这样就能避免TS2428错误,同时满足“抽象类遵循接口约束”的设计意图。
内容的提问来源于stack exchange,提问作者Adam Baranyai
相关产品推荐
相关产品推荐

