logweft.

TS-L3-091 / 도구 타입 구현

DeepReadonly 구현

중급

문제

DeepReadonly<T>가 중첩 객체의 모든 필드를 readonly로 만들도록 정의하세요. 함수는 그대로 유지합니다.

요구한 타입·변수 이름을 유지하세요. 각 타입 계약이 컴파일되는지를 확인합니다. 코드를 실행하는 문제는 아닙니다.

타입 계약

중첩 객체
type Check = Expect<Equal<DeepReadonly<{a:{b:number}}>, {readonly a:{readonly b:number}}>>;
함수 보존
type Check = Expect<Equal<DeepReadonly<()=>string>, ()=>string>>;
힌트

함수와 객체를 구분한 뒤 속성값에 재귀 적용하세요.

해설·정답 보기

원시값은 그대로 두고 객체 키에 readonly를 붙입니다. 함수 호출 시그니처도 보존합니다.

type DeepReadonly<T> = T extends (...args:any[])=>any ? T : T extends object ? {readonly [K in keyof T]:DeepReadonly<T[K]>} : T;
모르는 문법은 코드 사전에서 ↗
answer.ts타입 확인

코드는 이 브라우저에 자동 저장돼요.

풀이 결과

코드를 작성하고 채점하기를 눌러보세요.

    학습용으로 제공된 조건을 확인해요. 알고리즘 사용 방식·설계 의도는 해설과 함께 비교해보세요.

    어떤 기록을 찾으세요?

    키워드를 입력하면 기록을 찾아드려요.