如何基于TypeScript现有类型生成键值关联的联合类型?
基于已有TypeScript类型动态生成关联联合类型
首先定义原类型:
type ListingFilterBy = { season?: string[]; name?: string; isOnMarket?: boolean; };
要动态生成与原类型键关联的FilterAction联合类型,无需手动枚举每个键,可以通过映射类型+索引访问类型实现:
type FilterAction = { [K in keyof ListingFilterBy]: { key: K; value: ListingFilterBy[K]; } }[keyof ListingFilterBy];
实现说明
[K in keyof ListingFilterBy]:遍历ListingFilterBy的所有键,为每个键生成对应的对象类型- 每个对象类型中,
key的类型是当前键名K,value的类型是原类型中该键对应的类型ListingFilterBy[K] - 最后通过
[keyof ListingFilterBy]索引整个映射类型,将所有生成的对象类型合并为联合类型
效果验证
生成的FilterAction与手动编写的完全等价,并且当ListingFilterBy的结构(键名或对应类型)修改时,FilterAction会自动同步更新,无需手动维护。
内容的提问来源于stack exchange,提问作者Trey Granderson
相关产品推荐
相关产品推荐

