typescript - 通过泛型类型查找键入键
问题描述
我正在尝试获得这样的强类型:
enum Schema {
content = 'content',
interaction = 'interaction',
}
type ContentData = {
content: string;
};
type Data = Record<Schema, unknown> & {
[Schema.content]: ContentData;
}
type Event<T extends keyof typeof Schema> = {
event: string;
schema: T;
data: Data[T] // <----- error: Type 'T' cannot be used to index type 'Data'.
};
我现在的问题是,我想data
根据所选的架构进行输入,但 TS 会抛出错误Type 'T' cannot be used to index type 'Data'.
。
预期的行为将是:
Event<Schema.content> === {
event: string;
schema: Schema.content;
data: ContentData;
}
Event<Schema.interaction> === {
event: string;
schema: Schema.interaction;
data: unknown;
}
我怎样才能做到这一点?
解决方案
您将枚举视为对象,但它是正确的类型。因此,如果您改为使用:
type Event<T extends Schema> = {
event: string;
schema: T;
data: Data[T];
}
然后它应该可以工作。
推荐阅读
- python - Python socketio等待连接初始化
- arrays - 使用 break 语句打印出数组中不重复数字的 C 程序
- qt - 有没有使用 Lottie 动画的 qt 应用程序的正常示例?
- python - 在 google colab 上使用 pytorch 下载 EMNIST 时出现连接错误
- javascript - 当我添加helmetJS时,字体真棒显示白色方块
- java - 为什么使用 redisson.getLocalCachedMap 与 redisson.getMapCache 保存的数据存在差异
- css - React-Bootstrap 居中项目不起作用
- sql-server - 如何解码在 SQL Server 数据库中存储为整数的时间
- mongodb - MongoDB Java 错误:管道阶段规范对象必须只包含一个字段
- python - Django - 在日志中使用 mail_admins 自定义发送给管理员的错误电子邮件。感性信息过多