如何输入“mergeDeepRight”

How to type input to `mergeDeepRight`

我有功能

const updateStoreMerge = (value: PartialRecursive<StoreType>): StoreType => updateStore(s => mergeDeepRight(s, value));

如何打字? Value 应该只是 StoreType 的子集。我想要部分类似的东西,但递归地将可空性赋予所有属性。

type PropsThatAreObjects<T, K extends keyof T> = K extends keyof T ? T[K] extends object ? K : never : never;

type PartialAll<T> = {
  [K in PropsThatAreObjects<T, keyof T>]?: PartialAll<T[K]> &
  [K in keyof T except the ones in PropsThatAreObjects<T, keyof T>]?: T<K> 
};

我写这个有问题

[K in keyof T except the ones in PropsThatAreObjects<T, keyof T>]?: T<K> 

非常感谢:)

在我看来 PartialAll(或 PartialRecursive)可以简化为:

type PartialAll<T> = T extends object ? { [K in keyof T]?: PartialAll<T[K]> } : T;