type PartialKeyMap = { [K in keyof T]?: PropertyKey; }; type Renamed> = { [K in keyof T as KM[K] extends PropertyKey ? KM[K] : K]: T[K]; }; type NonU = Exclude; type ValuesAsTuple> = { [K in keyof O]-?: NonU; }[keyof O][]; type HasDuplicate = T extends readonly [infer F, ...infer R] ? F extends Seen[number] ? true : HasDuplicate : false; type NoDuplicateValuesKM = HasDuplicate>> extends true ? never : KM; /** ## `rekey` : 根据映射表重命名对象的键,保持值不变 + 生成一个全新对象,原始对象不会被修改 + 允许映射表只包含部分键;未出现在映射表中的键将保留原名 + 严格类型推导:返回值的键名与值类型都能被 TypeScript 正确推断 @example Usage ```ts const data = { aVa: 1, userId: 2, userName: 'jiojio', addressWhere: 'beijing', noChangeKey: 'balabala', } const kmap = { aVa: 'ava', addressWhere: 'address', userId: 'id', userName: 'name' } as const const result = rekey(data)(kmap) type Expected = { ava: number; id: number; name: string; address: string; noChangeKey: string } assert.type().equal() const expected = { ava: 1, id: 2, name: 'jiojio', address: 'beijing', noChangeKey: 'balabala' } assert.equal(result, expected) ``` @example Usage - repeat insertion ```ts const data = { addressWhere: 'beijing', aVa: 1, userId: 2, userName: 'jiojio', noChangeKey: 'balabala', } const kmap = { aVa: 'ava', addressWhere: 'ava', userId: 'id', userName: 'name', } as const //重复key值 - 按照es2015规范,后面的会覆盖前面的 const result = rekey(data)(kmap) assert.equal(result.ava, 1) ``` @category Function */ export declare function rekey>(data: T): >(kmap: NoDuplicateValuesKM & KM) => Renamed; export {}; //# sourceMappingURL=rekey.d.ts.map