如何实现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
相关产品推荐
相关产品推荐

