如何在不重复代码、不使用联合类型的情况下扩展接口仅修改单个值?
创建仅单个值不同的相似接口的最佳方案
针对你提出的需求——创建仅单个字段值不同的相似接口,同时避免代码重复且不使用联合类型,泛型接口是最优雅且可扩展的解决方案。
实现思路
将接口的公共结构抽离为一个泛型基础接口,把差异字段(这里是type)作为泛型参数传入,通过指定不同的泛型参数来生成具体的接口类型。这种方式既复用了代码,又能保证每个接口的独立性。
代码示例
首先定义包含所有公共字段的泛型基础接口:
// 泛型基础接口,T用于指定type字段的字面量类型 export interface BaseType<T extends string> { id: string; parentId: string; type: T; data: string[]; dataA: string[]; dataB: string[]; dataC: string[]; dataD: string[]; dataE: string[]; }
然后通过指定不同的泛型参数,快速生成所需的具体类型:
// 生成type为'a1'的接口 export type FirstType = BaseType<'a1'>; // 生成type为'a2'的接口 export type SecondType = BaseType<'a2'>; // 若后续需要新增同结构接口,只需一行代码扩展 export type ThirdType = BaseType<'a3'>;
方案优势
- 无代码重复:所有公共字段只需在基础接口中定义一次,无需重复编写
- 类型明确:每个生成的类型都是独立的,不需要依赖联合类型来区分
- 扩展性强:新增同结构的接口仅需指定新的泛型参数,维护成本极低
- 类型安全:
type字段被严格限定为传入的字面量类型,避免非法值
对比原继承写法
你提供的继承写法在仅两个接口时可行,但泛型方案更适合场景扩展:当需要生成多个同结构不同type的接口时,泛型无需反复声明继承并覆盖字段,逻辑更简洁清晰。
内容的提问来源于stack exchange,提问作者Richardson
相关产品推荐
相关产品推荐

