이제 value에 들어있는 null을 없애줘보자
null을 제거하기 위해서는
typescript의 utility 지원 NonNullable<T>
을 '활용' 하면 될것 같다.
NonNullable<T>
은 유니온타입의 '값' 에서 null
, undefined
를 제거해주는 utility 제네릭이다
사용법은 아래의 사진과 같다.
위의 사진과 같이 NonNullable<T>
은 객체타입의 value 값에 들어있는 null
, undefined
는 삭제 할수 없다.
그렇다면 어떻게 없앨것인가.... ??? 내가 원하는 것은
객체 타입의 value 값에 있는 null
, undefined
를 없애는 것인데...
혼자서 궁리할 때 index_signature
와 같이 섞어서 사용하면 될것 같은데...
구글링을 하다가 좋은 해결방향을 알게 되었다. stackoverflow
타입 제너레이터를 만들어줘보자
type T_RemoveNull<T> = { [K in keyof T] : NonNullable<T[K]> }
위의 문장을 차근차근 인간의 언어로 풀어보자면..
type T_RemoveNull<T>
할당된 타입변수의 해석은 <T>
여기에는 Generic
이 들어와요
Generic
이들어오면 오른쪽에 있는 로직으로 풀어서 설명하는데...
[k in keyof T]
: T
는 객체 타입이구요, K
는 객체 타입의 T에 들어있는 key
값입니다.
NonNullable<T[K]>
: T[K]
는 key
값에 따른 value
값인데, null
, undefined
삭제한 value
에요
결론 : T_RemoveNull<T>
는 null
, undefined
를
이렇게 풀수 있다.
type T_CVAProps = VariantProps<typeof style> // CVA type 추출
type T_RemoveOptionalType = Required<T_CVAProps> // optional 삭제
type T_RemoveNull<T> = { [K in keyof T] : NonNullable<T[K]> } // 타입제너레이터 만들기
type T_CompleteCVAProps = T_RemoveNull<T_RemoveOptionalType> // null값 삭제한 타입
이렇게 총 3단계를 거쳐서 해결 할 수가 있다.
총 3단계를 거쳐서 내가 원하는 타입을 만들 수 있지만, 조금더 축약하고 싶은 욕구가 든다.