기여 요약
오류를 조회·초기화하는 동작과 오류 경로의 타입 정확도를 하나의 흐름으로 개선했습니다. 구독 없이 오류를 읽는 신규 API를 설계하고, 내부 상태 불일치와 부모 경로 타입 누락을 해결했으며 공통 오류 경로 타입과 회귀 테스트를 보강했습니다.
관련 PR
1. 구독 없이 오류를 조회하는 getErrors API 추가
문제 상황
•
formState.errors와 subscribe는 구독이 필요하고 getFieldState는 한 필드만 조회할 수 있어, 현재 오류를 필요할 때 한 번에 읽는 공개 API가 없었음
해결방안
•
검증이나 구독을 발생시키지 않고 저장된 오류를 읽는 getErrors API를 설계
•
인자 없음·단일 경로·경로 배열 호출을 지원하고 배열 입력은 순서와 길이를 보존하는 튜플 타입으로 반환
•
useForm, useFormContext, createFormControl의 동작·타입 테스트를 추가
2. clearErrors의 내부 상태 불일치 해결
문제 상황
•
구독자 없이 createFormControl()을 사용할 때 clearErrors() 이후에도 내부 오류가 남아 getFieldState(name).invalid가 계속 true를 반환
원인 파악
•
구독자에게 빈 오류 객체만 전달하고 _formState.errors 자체는 초기화하지 않아 내부 상태와 이벤트 값이 불일치
해결방안
•
인자 없는 clearErrors() 호출 시 내부 오류 상태를 직접 초기화하고 갱신된 값을 전달
•
독립형 createFormControl()과 무구독 상황을 재현하는 회귀 테스트를 추가
3. 부모 경로의 중첩 오류 타입 추론 개선
문제 상황
•
getFieldState(name).error가 항상 FieldError로 추론되어 배열·객체의 부모 경로에서 반환되는 중첩 오류 구조를 타입으로 표현하지 못함
해결방안
•
선택한 필드 경로로 오류 타입을 계산하는 공개 FieldPathError 타입을 추가
•
부모 경로는 중첩 오류를 포함하고 리프·제네릭 경로는 기존 타입을 유지하도록 구성
•
배열·객체·리프 경로에 대한 타입 테스트를 보강
4. root·form 오류 경로 타입 공통화
문제 상황
•
UseFormSetError와 UseFormClearErrors가 root, root.*, form, form.* 오류 경로 타입을 각각 중복 정의
해결방안
•
공통 ErrorNamespacePath 타입을 추출해 두 API가 동일한 오류 네임스페이스 규칙을 사용하도록 통합
5. FieldErrors의 Blob 타입 회귀 테스트 보강
문제 상황
•
FieldErrors 타입 테스트의 설명에는 Blob이 일반 레코드 필드로 처리되지 않아야 한다고 명시되어 있었지만 실제 검증 사례가 누락
해결방안
•
최상위와 중첩 경로의 Blob 타입 단언을 추가해 타입 정의와 테스트 설명을 일치시키고 회귀를 방지