00008-medium-readonly-2

Back

type MyReadonly2<T, K extends keyof T = keyof T> =  Omit<T, K> & {
  readonly [I in keyof T]: T[I]
}

Solution by tungulin #36724

// 여기 풀이를 입력하세요
type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [key in K]: T[key]
} & Omit<T, K>

Solution by seungdeok #36697

type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [P in K]: T[P]
} & {[U in keyof T as U extends K ? never : U] : T[U]}

Solution by wiJeeXu #36664

type MyReadonly2<T, K extends keyof T = keyof T> = { readonly [P in K]: T[P] } & { [P in Exclude<keyof T, K>]: T[P] }

Solution by ChemieAi #36561

type MyReadonly2<T, K = keyof T > =  
{ readonly [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 badri-derakhshan #36529

type MyReadonly2<T, K extends keyof T = keyof T> = { readonly [P in K]: T[P] } & { [P in Exclude<keyof T, K>]: T[P] }

Solution by asylbekduldiev #36328

// 你的答案
type MyReadonly2<T, K extends keyof T  =  keyof T> = {
  readonly [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 leafBoat-dev #36295

// 你的答案
type Merge<T> = {
  [P in keyof T]: T[P]
}
type MyReadonly2<T extends object, K extends keyof T = never> = [K] extends [never] ? 
  { readonly[P in keyof T] : T[P]}
  :Merge<{ readonly[P in keyof T as P extends K ? P : never] :  T[P]}&{ [P in keyof T as P extends K ? never : P] :  T[P]}>
//虽然方式很笨拙,不管没出西现报错就好

Solution by 352623635 #36166

type MyReadonly2<T, K extends keyof T = keyof T> =
      {readonly [Prop in keyof T as Prop extends K ? Prop : never]: T[Prop]}
    & {[Prop in keyof T as Prop extends K ? never : Prop]: T[Prop]}

Solution by karazyabko #36037

type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [P in K]: T[P];
} & {
  [P in keyof T as P extends K ? never : P]: T[P];
};

Solution by Young2un #35703

type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [P in K]: T[P];
} & Omit<T, K>;

Solution by gangnamssal #35506

// your answers
type MyReadonly2<T extends {}, K extends keyof T = keyof T> = T & { readonly [P in K]: T[P] };

Solution by Sathiyapramod #35456

type MyReadonly2<T, K = keyof T> = Omit<T, K & keyof T> & {
  readonly [k in keyof T as k extends K ? k : never]: T[k]
}

Solution by wendao-liu #35174

type MyReadonly2<T, P extends keyof T> = {
	readonly [K in P]: T[K];
} & {
	[K in keyof T as K extends P ? never : K]: T[K];
}

Solution by ClarityOfMind #35041

type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [key in K]: T[key];
} & {
  [key in keyof Omit<T, K>]: T[key];
}

Solution by dominikmatt #35009

type MyReadonly2<T, K extends keyof T> = {
 readonly [P in K]: T[P]
} & {
  [P in Exclude<keyof T, K>]: T[P];
};

Solution by raeyoung-kim #34997

type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [key in K]: T[key]
} & {
  [key in keyof T as key extends K ? never: key]: T[key]
}

Solution by 56aiden90 #34909

type MyReadonly2<T, K extends keyof T = keyof T> ={ readonly [key in K]: T[key] } & { [R in keyof T as R extends K ? never : R]: T[R] }

Solution by floatDreamWithSong #34872

type MyReadonly2<T, K extends keyof T = keyof T> = { readonly [Key in keyof Pick<T, K>]: T[Key] } & { [Key in keyof Omit<T, K>]: T[Key] }

Solution by eunsukimme #34825

// your answers
type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [P in K]: T[P];
} & {
  [P in keyof T as P extends K ? never : P]: T[P];
};

Solution by zeyuanHong0 #34774

// 你的答案
type MyOmit<T extends Record<string, any>, K> = {
  [key in keyof T as key extends K ? never : key]: T[key]
}
type MyPick<T extends Record<string, any>, K> = {
  [key in keyof T as key extends K ? key : never]: T[key]
}
type ToReadonly<T extends Record<string, any>> = {
  readonly [key in keyof T]: T[key]
}

type IsRq<T, U> = (<P>() => P extends T ? 1 : 2) extends (<P>() => P extends U ? 1 : 2) ? true : false

type MyReadonly2<T extends Record<string, any>, K extends keyof T | undefined = undefined> = IsRq<K, undefined> extends true ? ToReadonly<T> : ToReadonly<MyPick<T, K>> & MyOmit<T, K>

Solution by softkilllengxiaoning #34734


type MyReadonly2<T, K extends keyof T = keyof T> = {
  readonly [P in K]: T[P];
} & {
  [P in keyof T as P extends K ? never : P]: T[P];
}


Solution by dev-jaemin #34630

type MyReadonly2<T, K extends keyof T = keyof T> = 
{
  readonly [key in K] : T[key]
} & {
  [P in keyof T as P extends K ? never : P] : T[P]
}
// K extends keyof T = keyof T, use "=" here mean that assign K with default value keyof T

Solution by binhdv155127 #34602

type MyReadonly2<T extends Record<string, any>, K extends keyof T = keyof T> = { [P in keyof T as (P extends K ? never : P)]: T[P] } & { readonly [P in keyof T]: T[P] }
// your answers

Solution by Rustamaha #34589

type MyReadonly2<T, K extends keyof T = keyof T> = Omit<T, K> & {
  readonly [U in K]: T[U]
} & Omit<T, K>

Solution by Yunjaejo #34588

type MyReadonly2<T, K extends keyof T = keyof T> = {
   [P in keyof T as P extends K ? never : P]: T[P]
} & {
  readonly [P in K]: T[P]
}

Solution by devshinthant #34560

//存在小问题的答案
type MyReadonly2<T, K extends keyof T> = Readonly<Pick<T, K>> & Omit<T, K>;

如果对于泛型K没有指定默认值,则泛型K为必填选项,无法跑通第一个案例,即仅存在单个T,而不存在K的情况。所以要为第二个泛型指定默认值。

//正确答案
type MyReadonly2<T, K extends keyof T = keyof T> = Readonly<Pick<T, K>> & Omit<T, K>;

Solution by wxh-cyber #34441

type MyReadonly2<T extends object, K extends keyof T = keyof T> = {
  readonly [P in K]: T[P];
} & {
  [P in keyof T as P extends K ? never : P]: T[P];
}

Solution by ktim816 #34431

type MyReadonly2<T, K extends keyof T = keyof T> = Omit<T, K> & { readonly [P in K]: T[P] }

Solution by rookie-luochao #34368

// your answers

type Pick<T,B extends keyof T> = {[K in B]: T[K]}
type Exclude<T, U> = T extends U ? never : T

type MyReadonly2<T, K extends keyof T= keyof T> = {readonly [E in K ]: T[E]} & Pick<T, Exclude<keyof T, K>>

Solution by felix1532 #34314