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

TypeScript报错:Type 'key'无法索引type 'data'类型求解决

解决TypeScript索引错误:Type 'key' cannot be used to index type 'data'

问题原因

你的代码中泛型约束T extends Record<NotificationDataType, true>不符合实际需求:这会让keyof T的类型推断与data的键类型关联失效,导致TypeScript无法确认key是data的有效索引;同时type字段的类型被错误约束为包含所有枚举键的对象,而非预期的枚举成员。

修复方案

调整泛型约束,让T直接对应data的键类型(即NotificationDataType枚举成员),并通过Pick工具类型或映射类型正确关联data的字段类型:

// 重命名类型为首字母大写,符合TS规范(非强制,仅提升可读性)
type DataMap = {
  [NotificationDataType.USER]: User;
  [NotificationDataType.COMMUNITY]: Community;
  [NotificationDataType.LISTING]: Listing;
  [NotificationDataType.COMMENT]: Comment;
};

export interface SendNotificationOptions<T extends keyof DataMap> {
  type: T;
  message: string;
  // 方式1:使用Pick工具类型直接提取对应键的类型
  data: Pick<DataMap, T>;
  // 方式2:使用映射类型,效果与Pick一致
  // data: { [K in T]: DataMap[K] };
  iconId?: string;
  iconName?: string;
  recepients: string[];
  sendEmail?: boolean;
}

说明

  • 泛型T被约束为keyof DataMap,确保T只能是NotificationDataType的有效枚举成员,此时T的所有键必然是DataMap的有效索引,从根源消除类型错误。
  • Pick<DataMap, T>会自动提取DataMap中所有属于T的键值对类型,无需手动映射,代码更简洁。

内容的提问来源于stack exchange,提问作者Sostene MUNEZERO BAGIRA

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 07:29:53