본문 바로가기
Language/Typescript

타입챌린지 : 2793-Mutable (medium)

by hsloth 2023. 5. 18.

 

이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다.

 

https://github.com/type-challenges/type-challenges/blob/main/questions/02793-medium-mutable/README.md

 

GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

Collection of TypeScript type challenges with online judge - GitHub - type-challenges/type-challenges: Collection of TypeScript type challenges with online judge

github.com

 

제네릭 T의 readonly를 없애고 쓰기까지 가능하게 할 수 있게 만드는 속성이다.

 

ㅋㅋㅋ 바로 풀었다.

진짜 오잉? 하고 풀었다.

설마 되나 하고 -readonly를 앞에 붙여봤는데 되더라... ㅋㅋㅋㅋㅋㅋㅋ

-?도 되는데 이게 안돼? 하고 붙였는데... 됐다...

https://suloth.tistory.com/93

 

타입챌린지 : 2759-RequiredByKeys (medium)

이 글은 제가 타입챌린지를 하면서 해석한 내용을 적는 글입니다. 틀린 내용이 있으면 댓글 달아주시면 감사하겠습니다. https://github.com/type-challenges/type-challenges/blob/main/questions/02759-medium-requiredbyk

suloth.tistory.com

-? 는 위의 포스팅을 참고하자.

 

type Mutable<T extends object> = {
  -readonly [P in keyof T]: T[P]
}

type A = Readonly<Mutable<Todo1>>

/* _____________ Test Cases _____________ */
import type { Equal, Expect } from '@type-challenges/utils'

interface Todo1 {
  title: string
  description: string
  completed: boolean
  meta: {
    author: string
  }
}

type List = [1, 2, 3]

type cases = [
  Expect<Equal<Mutable<Readonly<Todo1>>, Todo1>>,
  Expect<Equal<Mutable<Readonly<List>>, List>>,
]

type errors = [
  // @ts-expect-error
  Mutable<'string'>,
  // @ts-expect-error
  Mutable<0>,
]

type Mutble<T extends object> : T 가 object를 상속받게하여 error를 방지한다.

-readonly [P in keyof T]: T[P] : T의 키값을 P라고 하는데, readonly를 제거해준다.