我正在try 创建一个函数来反转所提供的对象.
例如,我有这样一个物体
{
a: "aee",
b: "bee",
c: "cee"
}
我想把它做成
{
aee: "a",
bee: "b",
cee: "c"
}
使用如下函数:
mapSelf(myObject)
JavaScript中的逻辑很简单:
function mapSelf(object) {
const result = {};
for (const [key, value] of Object.entries(object)) {
result[value] = key;
}
return result;
}
const test = mapSelf({
a: 'aee',
b: 'bee',
c: 'cee',
})
console.log(test)
// {
// "aee": "a",
// "bee": "b",
// "cee": "c"
// }
在Typescript 中做这件事几乎是可行的!
function mapSelf<const T extends Record<string, string>>(
object: T
): Record<T[keyof T], keyof T> {
const result: any = {}
for (const [key, value] of Object.entries(object)) {
result[value] = key
}
return result
}
const test = mapSelf({
a: 'aee',
b: 'bee',
c: 'cee',
})
但是,我在最终输出中丢失了键和它们的值之间的关系.
当我试图徘徊在H
以上时
const H = test.aee
我把H推定为
const H: "a" | "b" | "c"
我想让H等于它对应的键,在这种情况下,H
应该被推断为"a"