Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | // https://github.com/sindresorhus/type-fest/blob/main/source/set-required-deep.d.ts
import {
IsAny,
Paths,
RequiredDeep,
SetOptional,
SimplifyDeep,
UnionToTuple,
UnknownArray,
} from 'type-fest'
import { NonRecursiveType, StringToNumber } from 'type-fest/source/internal'
export type PartialDeepBy<
BaseType,
KeyPaths extends Paths<BaseType>,
> = IsAny<KeyPaths> extends true
? SimplifyDeep<RequiredDeep<BaseType>>
: PartialDeepByHelper<BaseType, UnionToTuple<KeyPaths>>
type PartialDeepByHelper<
BaseType,
KeyPathsTuple extends UnknownArray,
> = KeyPathsTuple extends [infer KeyPath, ...infer RestPaths]
? PartialDeepByHelper<PartialDeepBySinglePath<BaseType, KeyPath>, RestPaths>
: BaseType
type PartialDeepBySinglePath<BaseType, KeyPath> =
BaseType extends NonRecursiveType
? BaseType
: KeyPath extends `${infer Property}.${infer RestPath}`
? {
[Key in keyof BaseType]: Property extends `${Key & (string | number)}`
? PartialDeepBySinglePath<BaseType[Key], RestPath>
: BaseType[Key]
}
: SetOptional<
BaseType,
(KeyPath | StringToNumber<KeyPath & string>) & keyof BaseType
>
|