如何从TypeScript联合类型中提取所有成员的type字段值类型
从联合类型中提取所有成员的type字段值类型
直接利用TypeScript的索引访问类型特性即可实现需求,无需复杂的元类型技巧:
// 原类型定义 interface MysqlConnectionOptions { readonly type: "mysql" | "mariadb"; } interface PostgresConnectionOptions { readonly type: "postgres"; } export type DataSourceOptions = MysqlConnectionOptions | PostgresConnectionOptions; // 提取所有type字段值的联合类型 type DataSourceType = DataSourceOptions['type']; // 最终 DataSourceType 等价于 "mysql" | "mariadb" | "postgres"
原理说明
当对联合类型进行索引访问时,TypeScript会自动触发分布式类型行为:遍历联合中的每个成员类型,提取对应字段的类型,最后将所有结果合并为一个新的联合类型。
这种方式的优势在于:后续如果给DataSourceOptions添加新的连接配置类型(比如SqliteConnectionOptions),只要新类型包含type字段,DataSourceType会自动同步包含新的type值,无需手动维护。
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

