RTK-query error type Property 'status' does not exist on type 'SerializedError'.ts(2339)
1. issue
/pages/index.ts const [
postCNPlusResult,
{
isLoading: PostCNPlusResultLoading,
isError: IsPostCNPlusResultError,
error: PostCNPlusResultError,
isSuccess: PostCNPlusResultDone,
},
] = usePostCNPlusResultMutation();
useEffect(() => {
console.log('PostCNPlusResultError', PostCNPlusResultError.status);
}, [PostCNPlusResultError]);
rtk-query変異(上の例ではusePostCNPlusResultMutation)を使用している場合、成功時の「PostCNPlusResultError」の値は定義されておらず、失敗した場合、サーバは次のタイプの結果値を提供します. {
status: number;
data: { message: string; statusCode: number };
}
エラーが発生した場合、statusプロパティの値を表示する場合は、次のタイプのエラーが発生します.
Property 'status' does not exist on type 'ResponseErrorType | FetchBaseQueryError | SerializedError'.
Property 'status' does not exist on type 'SerializedError'.ts(2339)
次のBaseQueryFnは、変異結果値のタイプを示しています.
/redux/services/index.ts
const baseQuery = fetchBaseQuery({
baseUrl: baseURL,
credentials: 'include',
prepareHeaders: (headers, { getState }) => {
...
return headers;
},
});
const baseQueryWithIntercept: BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError> =
async (args, api, extraOptions) => { //이 부분
...
};
export const rtkApi = createApi({
baseQuery: baseQueryWithIntercept,
reducerPath: 'rtkApi',
endpoints: (build) => ({
...
});
export const { ... } = rtkApi;
/redux/services/store.tsimport { PostCNPlusResultRequestProps } from '@typings/store';
import { rtkApi } from './index';
const storeApi = rtkApi.injectEndpoints({
endpoints: (build) => ({
postCNPlusResult: build.mutation<any, PostCNPlusResultRequestProps>({
query: (body) => ({
url: '/Web/CNPlusResult',
method: 'POST',
body,
}),
}),
}),
overrideExisting: false,
});
export const { usePostCNPlusResultMutation } = storeApi;
2. solution
rtk-query createApiのbaseQueryタイプはサーバから投げ出されたエラーをFetchBaseQueryError
,ユーザが作成したコードをserializedError, queryFn, transformResponse
などと処理する.
条件文がUSECNPlusResultMutationエンドポイントからロードされたエラー・オブジェクト(PostCNPlusResultError)にdata属性があるかどうかをチェックすると、タイプ・スクリプトはFetchBaseQueryError
に自動的に処理され、エラーを解決できます.```
const [
postCNPlusResult,
{
isLoading: PostCNPlusResultLoading,
isError: IsPostCNPlusResultError,
error: PostCNPlusResultError,
isSuccess: PostCNPlusResultDone,
},
] = usePostCNPlusResultMutation();
useEffect(() => {
if ((!!PostCNPlusResultError && 'data' in PostCNPlusResultError) {
//TypeScript will handle it as FetchBaseQueryError
from now on. console.log('PostCNPlusResultError', PostCNPlusResultError?.status);
}
}, [PostCNPlusResultError]);
참고:
https://stackoverflow.com/questions/70017789/react-redux-how-to-handle-errors-in-rtk-queries-mutation-typescript
Reference
この問題について(RTK-query error type Property 'status' does not exist on type 'SerializedError'.ts(2339)), 我々は、より多くの情報をここで見つけました
https://velog.io/@maliethy/RTK-query-error-type-Property-status-does-not-exist-on-type-SerializedError.ts2339
テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol
const [
postCNPlusResult,
{
isLoading: PostCNPlusResultLoading,
isError: IsPostCNPlusResultError,
error: PostCNPlusResultError,
isSuccess: PostCNPlusResultDone,
},
] = usePostCNPlusResultMutation();
useEffect(() => {
console.log('PostCNPlusResultError', PostCNPlusResultError.status);
}, [PostCNPlusResultError]);
{
status: number;
data: { message: string; statusCode: number };
}
/redux/services/index.ts
const baseQuery = fetchBaseQuery({
baseUrl: baseURL,
credentials: 'include',
prepareHeaders: (headers, { getState }) => {
...
return headers;
},
});
const baseQueryWithIntercept: BaseQueryFn<string | FetchArgs, unknown, FetchBaseQueryError> =
async (args, api, extraOptions) => { //이 부분
...
};
export const rtkApi = createApi({
baseQuery: baseQueryWithIntercept,
reducerPath: 'rtkApi',
endpoints: (build) => ({
...
});
export const { ... } = rtkApi;
/redux/services/store.tsimport { PostCNPlusResultRequestProps } from '@typings/store';
import { rtkApi } from './index';
const storeApi = rtkApi.injectEndpoints({
endpoints: (build) => ({
postCNPlusResult: build.mutation<any, PostCNPlusResultRequestProps>({
query: (body) => ({
url: '/Web/CNPlusResult',
method: 'POST',
body,
}),
}),
}),
overrideExisting: false,
});
export const { usePostCNPlusResultMutation } = storeApi;
2. solution
rtk-query createApiのbaseQueryタイプはサーバから投げ出されたエラーをFetchBaseQueryError
,ユーザが作成したコードをserializedError, queryFn, transformResponse
などと処理する.
条件文がUSECNPlusResultMutationエンドポイントからロードされたエラー・オブジェクト(PostCNPlusResultError)にdata属性があるかどうかをチェックすると、タイプ・スクリプトはFetchBaseQueryError
に自動的に処理され、エラーを解決できます.```
const [
postCNPlusResult,
{
isLoading: PostCNPlusResultLoading,
isError: IsPostCNPlusResultError,
error: PostCNPlusResultError,
isSuccess: PostCNPlusResultDone,
},
] = usePostCNPlusResultMutation();
useEffect(() => {
if ((!!PostCNPlusResultError && 'data' in PostCNPlusResultError) {
//TypeScript will handle it as FetchBaseQueryError
from now on. console.log('PostCNPlusResultError', PostCNPlusResultError?.status);
}
}, [PostCNPlusResultError]);
참고:
https://stackoverflow.com/questions/70017789/react-redux-how-to-handle-errors-in-rtk-queries-mutation-typescript
```
const [
postCNPlusResult,
{
isLoading: PostCNPlusResultLoading,
isError: IsPostCNPlusResultError,
error: PostCNPlusResultError,
isSuccess: PostCNPlusResultDone,
},
console.log('PostCNPlusResultError', PostCNPlusResultError?.status);
}
참고:
https://stackoverflow.com/questions/70017789/react-redux-how-to-handle-errors-in-rtk-queries-mutation-typescript
Reference
この問題について(RTK-query error type Property 'status' does not exist on type 'SerializedError'.ts(2339)), 我々は、より多くの情報をここで見つけました https://velog.io/@maliethy/RTK-query-error-type-Property-status-does-not-exist-on-type-SerializedError.ts2339テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol