You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 16:59:32