TS2339:类型 {}

问题描述 投票:0回答:1

我在打字稿中使用react-redux并收到错误

import type {RootState} from "../store.ts";
import { fetchBaseQuery } from '@reduxjs/toolkit/query'
import type {BaseQueryFn, FetchArgs,FetchBaseQueryError,} from '@reduxjs/toolkit/query/react'
import {createApi} from "@reduxjs/toolkit/query/react";

const baseQuery = fetchBaseQuery({
    baseUrl:'http://localhost:3500/api/v1/',
    credentials:'include',
    prepareHeaders:(headers:Headers,{getState})=>{
        const token:string|null = (getState() as RootState).auth.token
        if(token){
            headers.set("authorization",`Bearer ${token}`)
        }
        return headers
    }
});

const baseQueryWithReauth: BaseQueryFn<string | FetchArgs,unknown, FetchBaseQueryError> = async (args, api, extraOptions) => {
    const result = await baseQuery(args, api, extraOptions)
    console.log(result?.data?.message.AT);
    return result
}

我怎样才能获得 result.data.message.AT 而不会出现错误。 “TS2339:类型 {} 上不存在属性消息” 我像这样从后端发送数据

res.status(200).send({success:true,message:{AT:accessToken}});
reactjs typescript react-redux rtk-query
1个回答
0
投票

在非错误响应中,

data
类型为
any
,请参阅fetchBaseQuery

type FetchBaseQueryResult = Promise<
  | {
      data: any
      error?: undefined
      meta?: { request: Request; response: Response }
    }
  | {
      error: {
        status: number
        data: any
      }
      data?: undefined
      meta?: { request: Request; response: Response }
    }
>

您可以投射响应

data
属性。

示例:

type ResponseData = {
  success: boolean;
  message: {
    AT: string;
  };
}

...

const baseQueryWithReauth: BaseQueryFn<
  string | FetchArgs,
  unknown,
  FetchBaseQueryError
> = async (args, api, extraOptions) => {
  const result = await baseQuery(args, api, extraOptions);

  if (result.data) {
    const data = result.data as ResponseData;
    console.log(data.message.AT);
  }

  return result;
}
© www.soinside.com 2019 - 2024. All rights reserved.