type ValuesOf<T> = T[keyof T];
type Subrecord<U extends PropertyKey, V> = ValuesOf<{
[Key in U]: Exclude<U, Key> extends ""
? never
: Record<Exclude<U, Key>, V> | Subrecord<Exclude<U, Key>, V>;
}>;
type DefinedPartial<T> =
T extends Record<infer U, infer V> ? T | Subrecord<U, V> : never;
Solution by NGdre #37979
type DefinedPartial<T, K extends keyof T = keyof T> = K extends unknown ? T | DefinedPartial<Omit<T, K>> : never;
Solution by mxniliuc #37551
type DefinedPartial<T, K extends keyof T = keyof T> = K extends unknown
? T | DefinedPartial<Omit<T, K>>
: never;
Solution by alexandroppolus #35291
type DefinedPartial<T extends Record<PropertyKey, unknown>> = Helper<keyof T, T[keyof T]>
type Helper<K, V, Keys = K> = [K] extends [never]
? never
: Record<K & PropertyKey, V> | (K extends K ? Helper<Exclude<Keys, K>, V> : never)
Solution by Sun79 #35277
type DefinedPartial<T, K = keyof T> = K extends K ? T | DefinedPartial<{[P in Exclude<keyof T, K>]: T[P]}> : never;
Solution by teamchong #35276