TIL에 한 편씩 집어넣으려 했으나, 분량문제로 시리즈를 분리하였다.

제네릭으로 2가지 타입을 받는다.
이를 이용하여 T객체의 K타입들을 readonly로 바꾸어 보자.
type MyExclude<T, U> = T extends U ? never : T
type MyReadonly2<T, K extends keyof T = keyof T> = {
readonly [P in K]: T[P]
} & {
[P in MyExclude<keyof T,K>]: T[P]
}
하지만 오류가 발생.

아마 이미 존재하는 readonly를 인식하지 못하는것 아닐까...?
그래서 고민하다가 끝내 풀이를 보았다.
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]
}
MyExclude를 풀어서 사용한점이 인상깊다. 특히 as키워드를 적극적으로 활용했다.
P in keyof T 여기서 일단 타입이 T객체 키값중 하나로 평가된다.as이후 P extends K ? never : P로 인하여 P가 K에서 상속되었다면 never, 상속되지 않았다면 그대로 P를 반환.as키워드로 단언되었다.1번하고 뭐가 다른건가 싶기도 하고...TS가 타입을 평가하는 방식에 아마 차이가 있을 것 같다.
다음에는 TS가 타입을 평가하고 결정하는 방식에 대해 알아보는 편이 좋겠다!