type precate 동작

precate 동작에 따라서 결과가 달랐다.

export type CreateBaseQueryResult<
  TData = unknown,
  TError = DefaultError,
  TState = QueryObserverResult<TData, TError>,
> = BaseQueryNarrowing<TData, TError> &
  MapToSignals<OmitKeyof<TState, keyof BaseQueryNarrowing, 'safely'>>

OmitKeyof 를 하게 되면 union 타입도 object 타입으로 변한다.

type precate 동작을 할때 의도한 대로 동작하지 않는다.

해결법

  1. BaseQueryNarrowing 을 4가지로 만들어야함
export interface BaseQueryNarrowing<TData = unknown, TError = DefaultError> {
  isSuccess: (
    this: CreateBaseQueryResult<TData, TError>,
  ) => this is CreateBaseQueryResult<
    TData,
    TError,
    CreateStatusBasedQueryResult<'success', TData, TError>
  >

CreateStatusBasedQueryResult<'success', TData, TError> 이 타입이랑