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

如何实现TypeScript唯一Record类型反转器,值重复时返回never

实现唯一值键值反转TypeScript类型工具

我们需要实现UniqueReverser类型工具,能力是将传入的对象类型的键值对反转生成新类型,仅当原类型所有字面量值唯一时返回反转结果,存在重复值时直接返回never。


正常场景(值唯一)预期效果

const VALUE = {
    field1: "fieldA",
    field2: "fieldB",
    field3: "fieldC"
} as const

type UReversed = UniqueReverser<typeof VALUE>
/*
预期输出:
{
    fieldA: "field1"
    fieldB: "field2"
    fieldC: "field3"
}
*/

异常场景(值重复)预期效果

const VALUE = {
    field1: "fieldA",
    field2: "fieldB",
    field3: "fieldA" // fieldA为重复值
} as const

type UReversed = UniqueReverser<typeof VALUE>
// 预期输出:never

完整实现代码

// 工具类型:检测对象值是否存在重复
type HasDuplicateValues<T extends Record<PropertyKey, PropertyKey>> = 
  { [K in keyof T]: { [P in keyof T]: K extends P ? never : T[K] extends T[P] ? true : never } }[keyof T][keyof T] extends true ? true : false

// 工具类型:无重复值时执行键值反转
type ReverseRecord<T extends Record<PropertyKey, PropertyKey>> = {
  [K in keyof T as T[K]]: K
}

// 最终暴露的 UniqueReverser 类型
type UniqueReverser<T extends Record<PropertyKey, PropertyKey>> = 
  HasDuplicateValues<T> extends true ? never : ReverseRecord<T>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 19:06:03