【发布时间】:2019-07-02 21:59:58
【问题描述】:
我正在尝试使用两个泛型 DeepMerge 和 Confine 创建一个 ConfineDeepMerge。
type DeepPartial<T> = {
[P in keyof T]?: T[P] extends (infer U)[]
? DeepPartial<U>[]
: T[P] extends ReadonlyArray<infer U>
? ReadonlyArray<DeepPartial<U>>
: DeepPartial<T[P]>
};
type ConfineExtention<A, B> = { [K in keyof B]: K extends keyof A ? (DeepPartial<A>[K]) : never };
type Confine<A, B extends ConfineExtention<A, B>> = B;
type DeepMerge<T, U> = [T, U] extends [object, object] ?
{
[K in keyof (U & Pick<T, Exclude<keyof T, keyof U>>)]: (
K extends keyof U ? (
K extends keyof T ? DeepMerge<T[K], U[K]> : U[K]
) : (
K extends keyof T ? T[K] : never
)
)
} : U;
type ConfineDeepMerge<A, B> = Confine<A, DeepMerge<A, B>>;
类型“DeepMerge”不满足约束“ConfineExtention>”。 'B 型 | { [K in keyof (B & Pick>)]: K 扩展 keyof B ? K 扩展 keyof A ? DeepMerge : B[K] : K 扩展 keyof A ? A[K] :从不; }' 不可分配给类型 'ConfineExtention>'。 类型“B”不可分配给类型“ConfineExtention>”。 [2344]
如何合并这两个泛型?
【问题讨论】:
标签: typescript