如何从已定义的类型映射中自动派生对应值类型的判别联合类型?
如何从已定义的类型映射中自动派生对应值类型的判别联合类型?
嘿,刚好TypeScript内置的类型操作就能完美解决这个问题,完全不用手动维护那个冗长的联合类型!
先回顾一下你已经定义好的类型映射:
export type IResourceTypeToFHIRTypeMap = { CodeSystem: fhir4.CodeSystem, Library: fhir4.Library, ObservationDefinition: fhir4.ObservationDefinition, PlanDefinition: fhir4.PlanDefinition, TestScript: fhir4.TestScript, Questionnaire: fhir4.Questionnaire, ValueSet: fhir4.ValueSet, }
要自动生成你想要的联合类型,只需要用索引类型查询和keyof操作符组合起来就行:
// 这一行就自动得到了你想要的所有值类型的联合 export type FHIRResourceUnion = IResourceTypeToFHIRTypeMap[keyof IResourceTypeToFHIRTypeMap];
简单解释下这个写法的逻辑:
keyof IResourceTypeToFHIRTypeMap会生成映射里所有键的联合类型,也就是"CodeSystem" | "Library" | "ObservationDefinition" | "PlanDefinition" | "TestScript" | "Questionnaire" | "ValueSet"- 用这个键联合去索引原类型
IResourceTypeToFHIRTypeMap,就会把每个键对应的值类型取出来,自动组合成你需要的判别联合类型,和你手动写的那一串完全等价!
最棒的是,以后你要是在IResourceTypeToFHIRTypeMap里新增或者修改某个类型,FHIRResourceUnion会自动同步更新,再也不用手动维护两份重复的类型定义了,完美适配你想要避免冗余代码的需求~
备注:内容来源于stack exchange,提问作者Brandon Taylor
相关产品推荐
相关产品推荐

