TS-L4-002 / 재귀 타입 설계
배열 포함 경로 추출
고급문제
Paths<T>를 중첩 객체와 배열의 문자열 경로 유니온으로 정의하세요. 배열 인덱스는 숫자 문자열 타입으로 표현하며 부모 경로도 포함합니다. 함수·순환 객체는 입력하지 않습니다.
요구한 타입·변수 이름을 유지하세요. 각 타입 계약이 컴파일되는지를 확인합니다. 코드를 실행하는 문제는 아닙니다.
타입 계약
중첩 경로
type Check = Expect<Equal<Paths<{user:{name:string};id:number}>, "user"|"user.name"|"id">>;배열 경로
type Check = Expect<Equal<Paths<{items:{name:string}[]}>, "items" | `items.${number}` | `items.${number}.name`>>;빈 객체
type Check = Expect<Equal<Paths<{}>, never>>;힌트
배열을 일반 객체보다 먼저 분기하고 숫자 인덱스 경로를 만드세요.
해설·정답 보기
배열의 메서드 이름이 경로에 섞이지 않도록 배열 조건을 먼저 처리합니다. 매핑 타입과 템플릿 리터럴로 하위 경로를 연결합니다.
type Paths<T> = T extends readonly (infer E)[] ? `${number}` | (E extends object ? `${number}.${Paths<E> & string}` : never) : T extends object ? {[K in keyof T & string]: K | (T[K] extends object ? `${K}.${Paths<T[K]> & string}` : never)}[keyof T & string] : never;answer.ts타입 확인
코드는 이 브라우저에 자동 저장돼요.
풀이 결과
코드를 작성하고 채점하기를 눌러보세요.
학습용으로 제공된 조건을 확인해요. 알고리즘 사용 방식·설계 의도는 해설과 함께 비교해보세요.