TypeScript中基于字符串字面量动态解析嵌套属性类型的实现疑问
TypeScript中基于字符串字面量动态解析嵌套属性类型的实现疑问
我最近在TypeScript里碰到个难题:想根据字符串字面量在编译时动态解析对应的属性类型。我试过用判别式联合类型来实现,虽然大部分场景下能跑通,但遇到错误时,TypeScript给出的提示信息总是有点绕,甚至会误导人。
给大家看个简化后的示例代码:
export type EntityTypes = "Cow" | "Dog"; export interface EntityCowDetails { milkQuantity: number, herdId: number } export interface EntityDogDetails { barkVolume: number, breed: string } // 我尝试用条件类型关联实体类型和详情类型 export type EntityDetails<T extends EntityTypes> = T extends "Cow" ? EntityCowDetails : T extends "Dog" ? EntityDogDetails : never; // 比如一个获取实体详情的函数 function getEntityDetails<T extends EntityTypes>(type: T): EntityDetails<T> { // 这里是实现逻辑,暂时用类型断言占位 return {} as EntityDetails<T>; }
举个例子,要是我不小心访问了某个实体不存在的属性,比如getEntityDetails("Cow").barkVolume,实际遇到的错误提示会比“类型EntityCowDetails上不存在属性barkVolume”模糊得多,有时候甚至会指向never类型,这就让我定位问题特别费劲。
我想请教一下,有没有更合适的方式来实现这种基于字符串字面量的动态类型解析,同时还能让错误提示更清晰直观呢?
备注:内容来源于stack exchange,提问作者JhonRM
相关产品推荐
相关产品推荐

