typescript类型的问题?

我想解决的是res.Code下面的红线问题
image.png
下面是loginApi接口的类型定义:

export const loginApi = (data: UserType): Promise<IResponse<UserType>> => {
  return request.post({ url: '/BackLogin/Login', data })
}

其中UserType类型的定义:

export type UserType = {
  userNo: string
  password: string
  role: string
  roleId: string
  permissions: string | string[]
}

IResponse类型的定义:

 declare interface IResponse<T = any> {
    Code: string|int
    Data: T extends any ? T : T & any
    Msg:string|any
  }

为什么Promise的返回值Code,Data,Msg下面都带红线?
image.png

代码:

  const res = await loginApi(data).catch(e=>{
        loading.value=false
      })
      if (res.Code===0) {
        wsCache.set(appStore.getUserInfo, res.Data)
        // 是否使用动态路由
        if (appStore.getDynamicRouter) {
          console.log("动态路由")
        } else {
         
        }
      }else{
        ElMessage.error(res.Msg)
      }
阅读 262
2 个回答
  const res = await loginApi(data).catch(e=>{
        loading.value=false
      }) as IResponse<UserType>;
      if (res && res.Code===0) {
        wsCache.set(appStore.getUserInfo, res.Data)
        // 是否使用动态路由
        if (appStore.getDynamicRouter) {
          console.log("动态路由")
        } else {
         
        }
      }else{
        ElMessage.error(res.Msg)
      }

但看loginApi的类型声明,是没什么问题的,建议为request.post添加类型声明。

export const loginApi = (data: UserType): Promise<IResponse<UserType>> => {
  return request.post<UserType>({ url: '/BackLogin/Login', data });
}

出现红线的原因是因为:catch的处理

const res = await loginApi().catch(e => {
      return Promise.reject()
})

你如果走了catch后不需要走下面了,可以这么处理。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
logo
Microsoft
子站问答
访问
宣传栏