02759-medium-requiredbykeys

Back

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 = { [K in keyof T]: T[K] }; type RequiredByKeys<T, K extends keyof T = never> = Normalize<Required<Pick<T, K>> & Pick<T, Exclude<keyof T, K>>>;

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