如何使用 TypeScript 类型将相似对象的联合转换为对象类型?
Input
type I = {
key: 'foo',
value: Foo,
} | {
key: 'bar',
value: Bar,
};
Output
type O = {
foo: Foo,
bar: Bar,
};
我不确定这是否可能。但谁知道呢?
请注意,该任务不重复that https://stackoverflow.com/questions/50374908/transform-union-type-to-intersection-type.
在 TypeScript 4.1 中,这是一个简单的具有键重新映射的映射类型 https://www.typescriptlang.org/docs/handbook/release-notes/typescript-4-1.html#key-remapping-in-mapped-types。您可以迭代每个成员T
of the I
union https://www.typescriptlang.org/docs/handbook/unions-and-intersections.html#union-types(这是并集,而不是交集)并且look up https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-1.html#keyof-and-lookup-types键/值类型:T['key']
对于钥匙和T['value']
为了价值。像这样:
type O = { [T in I as T['key']]: T['value'] };
/* type O = {
foo: Foo;
bar: Bar;
} */
Playground 代码链接 https://www.typescriptlang.org/play?#code/JYOwLgpgTgZghgYwgAgGIHt3IN4ChnJwBcyAzmFKAOYDcuAvrqJLIigEJxQ77IBGJcpRC0GuXGACeABxQBJZAF4eBANYRJJAOQxMWgDS8AbnAA2AVwgkM6Q-WQAfFcnWbkWvlwPGzlkpyg7OgkZFAB5JRxkAG0AFWRQZAU4UmRY6K1XLQBdbJJ0rRMLCBzkejoAegAqZClZZAjlPAICXXRrTDoW-i5-Ljp7KorcIA
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)