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
相关产品推荐
相关产品推荐

