typescript - 如何输入`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;
推荐阅读
- azure - Azure 中的 MFA 拒绝虚拟机访问
- visual-studio - 在 Visual Basic 上读取外部文件的指定行
- php - 如何确定在 PHP 中执行的 mySQL UPDATE 语句何时找到匹配项?
- yosys - ghdl-yosys-plugin 编译失败
- javascript - 在 HTML 标头中将 CSS 添加到 Javascript 源?
- sql - 在 PostgreSQL 中检查行是否存在非常慢
- javascript - JavaScript 代码在 Firefox 中有效,但在 Chrome 或 Edge 中无效
- python - 如何使用 Beautifulsoap 抓取 svg
- javascript - 使用 Gremlin 查询图形
- python - 如何根据值阈值过滤和删除 dict 元素?