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

TypeScript的UniqueForProp工具类型返回冗余类型如何修复

问题原因

出现冗余类型的核心原因是:当泛型T是数组/元组类型时,keyof T会返回数组所有实例属性的键集合,除了元素下标之外,还包含length、push、map等数组自带的方法/属性名,遍历这些非下标键时返回的无效类型混入了最终结果。

修复方案

直接用T[number]获取数组所有元素的联合类型,再传入Get类型取对应属性路径的值即可,不需要额外遍历键,修改后的完整代码如下:

type Get<T, K> = K extends `${infer FK}.${infer L}`
  ? FK extends keyof T
    ? Get<T[FK], L>
    : never
  : K extends keyof T
  ? T[K]
  : never;

// 优化后的UniqueForProp
type UniqueForProp<T extends readonly Record<string, any>[], P extends string> = Readonly<Get<T[number], P>>;

验证效果

使用原测试用例验证,可得到预期的联合类型:

const data = [
  { id: 123, color: "blue" },
  { id: 456, color: "red" },
] as const;
type Data = typeof data;
type U = UniqueForProp<Data, "id">; // 类型为 123 | 456,符合预期

该实现同时兼容嵌套属性路径的取值需求,例如传入a.b.c格式的路径也能正确返回对应属性的联合类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 04:27:01