- 객체인 경우 객체의 모든 속성에 대해 재귀적으로 변환을 적용합니다.
- 값 타입에 undefined가 포함된 경우 null 타입을 추가합니다.
- 배열과 같은 다른 객체 타입에도 적용됩니다.
- 중첩된 객체 구조의 모든 레벨에서 동작합니다.
/**
* Record 타입에서 undefined가 포함된 필드를 undefined | null로 변환하는 재귀적 유틸리티 타입
*/
type DeepUndefinedToNullable<T> = T extends object
? {
[K in keyof T]: DeepUndefinedToNullable<T[K]>;
} & (undefined extends T ? null : unknown)
: undefined extends T
? T | null
: T;
중첩이 아닌 상황에서는 아래 같이 사용해도 됩니다.
/**
* Record 타입에서 undefined가 포함된 필드를 undefined | null로 변환하는 유틸리티 타입
*/
type UndefinedToNullable<T> = {
[K in keyof T]: undefined extends T[K] ? T[K] | null : T[K];
};