TypeScript中如何批量合并多个接口为联合类型
编程式合并多个TypeScript接口为联合类型
当然可以!手动把一堆接口挨个写到联合类型里确实够麻烦的,尤其是接口数量多的时候,TypeScript提供了几种优雅的方式帮你自动生成这个联合类型,完全不用手动罗列:
方法1:利用命名空间批量管理接口
把所有需要合并的接口放到一个命名空间里导出,然后通过类型操作自动提取联合类型:
// 把所有接口集中放到命名空间里 namespace MyInterfaces { export interface Foo { foo: string } export interface Bar { bar: number } export interface Baz { baz: boolean } // 新增接口直接在这里加export interface即可 } // 自动生成所有接口的联合类型 type AllCombined = typeof MyInterfaces[keyof typeof MyInterfaces];
原理其实很好理解:
keyof typeof MyInterfaces会获取命名空间里所有导出接口的名称组成的联合类型(也就是"Foo" | "Bar" | "Baz")- 再通过
typeof MyInterfaces[xxx]取出每个名称对应的接口类型,最终自动组合成完整的联合类型。
方法2:用映射类型收集接口(适合分散定义的接口)
如果你的接口已经是分散定义的,不想搬到命名空间里,可以创建一个映射类型来“收集”这些接口,再提取联合:
// 已有的分散接口 interface Foo { foo: string } interface Bar { bar: number } interface Baz { baz: boolean } // 创建一个映射类型,把每个接口和一个键关联 interface InterfaceCollector { fooType: Foo; barType: Bar; bazType: Baz; // 新增接口时,只需要在这里加一行键值对即可 } // 自动生成联合类型 type AllCombined = InterfaceCollector[keyof InterfaceCollector];
这种方式的好处是不需要改动原有接口的定义,只需要在InterfaceCollector里新增条目,联合类型就会自动更新。
这两种方法都能帮你摆脱手动维护联合类型的麻烦,新增接口只需要在一个地方操作,非常适合接口数量多的场景~
内容的提问来源于stack exchange,提问作者jpthesolver2
相关产品推荐
相关产品推荐

