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

TypeScript如何通过泛型类型查找实现schema关联的data强类型

问题原因

报错的核心是Event泛型的约束定义错误:

  • 你写的T extends keyof typeof Schema 获取的是枚举的属性键名,也就是字面量联合类型 'content' | 'interaction'
  • 而Data类型的索引是Schema枚举值本身,和枚举键名类型不匹配,因此无法用T索引Data类型。
解决方案

仅需调整Event的泛型约束为枚举值类型Schema即可,原有Data的交叉类型写法无需修改,也可以优化为更直观的映射写法:

enum Schema {
  content = 'content',
  interaction = 'interaction',
}

type ContentData = {
  content: string;
};

// 原有交叉类型写法也可正常运行,这里是更清晰的映射写法可选
type Data = {
  [Schema.content]: ContentData;
  [Schema.interaction]: unknown;
}

// 仅需修改这里的泛型约束
type Event<T extends Schema> = {
  event: string;
  schema: T;
  data: Data[T];
};
效果验证

修正后完全符合预期类型表现:

  • Event<Schema.content> 类型为:
    {
      event: string;
      schema: Schema.content;
      data: ContentData;
    }
    
  • Event<Schema.interaction> 类型为:
    {
      event: string;
      schema: Schema.interaction;
      data: unknown;
    }
    

内容的提问来源于stack exchange,提问作者Sergej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:06:02