【发布时间】:2021-09-03 15:16:38
【问题描述】:
我正在尝试将联合类型转换为交集类型:
type UnionToIntersection<U> = // unknown code
type test = UnionToIntersection<{a: 1} | { b: 2}>
// typeof test should be {a: 1} & { b: 2}, an impossible type
这只是更大类型函数中的一步,它将合并{a:1} 和{b:2} 的属性以生成{a:1, b:2}。但这是后面的步骤。
第一步是我需要将我的并集转换为交集。我该怎么做?
对于那些想知道的人,它将进入:
export type SubpropertyMerge<T> = (
T extends (...args: infer A) => infer R ? (
(...args: A) => R
): (
T extends object ? (
T extends string | number | ((...args: any) => any) | symbol | boolean ? T
: { [K in keyof T]: SubpropertyMerge<T[K]> }
) : T
)
);
// SubpropertyMerge<{a: 1} & { b: 2}> === {a:1, b:2}
【问题讨论】:
-
我倾向于将其作为this question 的副本关闭,除非您能表达出不同之处。旁注:
{a: 1} & {b: 2}不是不可能的类型,它等价于{a:1, b: 2}...也许you have this confusion? -
我过度简化了我的情况。 “不可能”类型是
{ foo: {a :1}} & { foo: {b: 2}},因为 foo 将永远不会……或类似的东西。我还没有弄清楚交叉路口停止的确切点......特别是对我来说不直观。 -
That's not impossible either。与
never等效的不可能类型确实存在,但我还没有在这里看到。 -
最后一次尝试:
{ a:1 } & { a:2 }.
标签: typescript types union intersection