type RequiredByKeys<T, Key extends keyof T = keyof T> = Omit<T, Key> & Required<Pick<T, Key>>
Solution by ZhulinskiiDanil #32730
type RequiredByKeys<T, K extends keyof T = keyof T> = Omit<Omit<T, K> & { [P in keyof T as P extends K ? P : never]-?: T[P] }, never>
Solution by dev-hobin #32499
type RequiredByKeys<T, K extends keyof T = keyof T> = Omit<Required<Pick<T, K>> & Omit<T, K>, never>;
Solution by vangie #32173
type RequiredByKeys<T, K extends keyof T> = {
[P in keyof T as P extends K ? never : P]: T[P];
} & {
[P in keyof T as P extends K ? P : never]-?: T[P];
} extends infer I
? { [P in keyof I]: I[P] }
: never;
Solution by vipulpathak113 #31743
// your answers
type Compute<T> = { [K in keyof T]: T[K] };
type RequiredByKeys<T, K extends keyof T = keyof T> = Compute<Required<Pick<T, K>> & Omit<T, K>>;
version 2023-12-12 v1.15.0
Solution by Qzhor #31614
type RequiredByKeys<T extends {}, K extends keyof T = keyof T> = Omit<{[Key in K]-?: T[Key]} & Omit<T, K>, never>
Solution by korkota #31123
// your answers
type Merge<T> = {
[K in keyof T]: T[K]
}
type RequiredByKeys<T, K = keyof T> = Merge<T & Required<Pick<T, K & keyof T>>>
Solution by kangaroona #31077
type Intersection<T> = {
[K in keyof T]: T[K]
}
type RequiredByKeys<T, K extends keyof T = keyof T> = Intersection<Required<Pick<T, K>> & Omit<T, K>>;```
Solution by kai-phan #30974
type Unify<T> = { [Key in keyof T]: T[Key] }
type RequiredByKeys<T, K extends keyof T = keyof T> = Unify<{
[Key in keyof T as Key extends K ? Key : never]-?: T[Key]
} &{
[Key in keyof T as Key extends K ? never : Key]: T[Key]
}>
Solution by maximallain #30868
type RequiredByKeys<T, K extends keyof T = keyof T> = Omit<Omit<T, K> & {
[Key in K]-?: T[Key]
}, never>
Solution by matallui #30806
Take a page from type PartialByKeys
type IntersectionToObj<T> = {
[K in keyof T]: T[K]
}
type RequiredByKeys<T, K = keyof T> = IntersectionToObj<{
[P in keyof T as P extends K ? P : never]-?: T[P]
} & {
[P in Exclude<keyof T, K>]?: T[P]
}>```
Solution by neMew5 #30801
type Keys<T> = {
[P in keyof T]: T[P]
}
type RequiredByKeys<T, K = keyof T> = Keys<{
[P in keyof T as P extends K ? P : never]-?: T[P]
} & { [P in Exclude<keyof T, K>]?: T[P]; }>
Solution by qiqi1112 #30651
type Normalize
Solution by wouldRewind #30645
type InterSection<T>={
[S in keyof T]: T[S]
}
type RequiredByKeys<T, K extends keyof T = keyof T> = InterSection<{
[S in keyof T as S extends K ? S:never]-?:T[S]
}&{
[S in keyof T as S extends K ? never : S]:T[S]
}>
Solution by Yoon-Hae-Min #30511
// your answers
type GenerateNewType<T> = {
[K in keyof T]: T[K];
};
type RequiredByKeys<T, K extends keyof T = keyof T> = GenerateNewType<{
[U in keyof T as U extends K ? U : never ]-?: T[U]
} & {
[U in keyof T as U extends K ? never : U ] : T[U]
}>
Solution by kerolossamir165 #29732
// your answers
type RequiredByKeys<T, K extends keyof T = keyof T> = Omit<Omit<T, K> & Required<Pick<T, K>>, never>
Solution by nomiszzz #29664
type RequiredByKeys<T extends object, E extends keyof T = keyof T> = {
[k in E]-?: T[k]
} & {
[k in keyof T as k extends E ? never: k]?: T[k]
};
type User1 = RequiredByKeys<{
name?: string;
age?: number
}>;
Solution by sundial-dreams #29485
type RequiredByKeys<T, K extends keyof T = keyof T> = Omit<T & Required<Pick<T, K>>,never>
Solution by dmytro-shumak #29434
type RequiredByKeys<T, K extends keyof T=keyof T> = Omit<{
[Key in keyof T as Exclude<Key,K>]:T[Key]
}&{
[Key in K]-?:T[Key]
},never>
Solution by DoubleWoodLin #28694
type RequiredByKeys<T, K extends keyof T = keyof T> =
Omit<Omit<T, K> & Required<Pick<T,K>>, never>
Solution by jjswifty #27627
// your answers
type Flatten<T> = {
[K in keyof T]: T[K];
};
type RequiredByKeys<T, K extends keyof T = keyof T> = Flatten<
Omit<T, K> & { [k in K]-?: T[k] }
>;
Solution by daiki-skm #27491
type RequiredByKeys<T, K extends keyof T> = Omit< T & Required<Pick<T, K>>, never>
Solution by vuongManabie #27195
type Merge<F extends Record<any, any>, S extends Record<any, any>> = {
[K in keyof (F & S)]: K extends keyof S ? S[K] : F[K]
}
type RequiredByKeys<T extends Record<any, any>, K extends keyof T = never> =
[K] extends [never] ? Required<T> : Merge<Required<Pick<T, K>>, Omit<T, K>>
Solution by smileboyi #26982
type Flatten<T> = {
[K in keyof T]: T[K];
};
type RequiredByKeys<T, K extends keyof T> = Flatten<
{
[key in K]-?: T[K];
} & Omit<T, K>
>;
Solution by ryuji-1to #26883
type RequiredByKeys<T, U extends keyof T = keyof T> = Omit<T, U> & { [P in U]-?: T[P] };
Solution by rldnd #26855
type Interection<T> = {
[P in keyof T]: T[P]
}
type RequiredByKeys<T, K extends keyof T = keyof T> = Interection<
{
[P in K]-?: T[P]
} &
Omit<T, K>
>
Solution by isntkyu #26581
export type RequiredByKeys<T, K extends keyof T = keyof T> = {
[Key in keyof T as Key extends K ? Key : never]-?: T[Key]
} & {
[Key in keyof T as Key extends K ? never : Key]: T[Key]
} extends infer Result
? { [K in keyof Result]: Result[K] }
: never
Solution by HaoxueAllen #26523
// your answers
type RequiredByKeys<T extends Record<PropertyKey, any>, K extends keyof T> = {
[Key in K]-?: T[Key]
} & Omit<T, K>
Solution by hhk9292 #25995
// your answers
type Flatten<T> = {
[key in keyof T]: T[key];
};
type RequiredByKeys<T, K extends keyof T = keyof T> = Flatten<
Omit<T, K> & {
[P in K]-?: T[P];
}
>;
Solution by rayjayjin #25990
type RequiredByKeys<
T,
K extends keyof T = keyof T,
R = { [Key in K]-?: T[Key] } & Omit<T, K>,
> = { [Key in keyof R]: R[Key] }
Solution by tokyo9pm #25988