You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用SWR做类型安全数据请求时any类型的替代方案是什么

这个告警触发的原因是泛型默认值使用了显式any,违反了@typescript-eslint/no-explicit-any规则,优先推荐将any替换为unknown,具体可根据你的使用场景选择以下方案:

方案1:泛型默认值改为unknown(最推荐,符合类型安全要求)

通用fetcher作为公共工具函数,本身无法预判所有返回数据的结构,将默认泛型设为unknown可以强制你在调用useSWR时显式声明对应接口的返回类型,从根源避免隐式any带来的类型安全隐患。修改后代码如下:

export default async function fetcher<JSON = unknown>(
  input: RequestInfo,
  init?: RequestInit
): Promise<JSON> {
  const res = await fetch(input, init)
  return res.json() as JSON
}

使用时直接给useSWR传入对应返回类型即可获得完整类型提示:

// 示例:请求用户信息接口,预先定义返回类型为User
interface User {
  id: number
  name: string
  email: string
}
const { data } = useSWR<User>('/api/user', fetcher)

方案2:固定为自定义返回类型(仅适用于非通用场景)

如果你的fetcher只用来请求特定业务域的接口,返回结构完全固定,可以直接将泛型替换为你预先定义的业务类型,不需要设置泛型默认值:

// 示例:自定义业务接口通用返回结构
interface BizResponse<T = unknown> {
  code: number
  data: T
  message: string
}
export default async function fetcher<T = unknown>(
  input: RequestInfo,
  init?: RequestInit
): Promise<BizResponse<T>> {
  const res = await fetch(input, init)
  return res.json()
}

使用时只需传入业务数据的类型即可:

const { data } = useSWR<BizResponse<User>>('/api/user', fetcher)

方案3:临时禁用规则(不推荐,仅用于兼容旧代码)

如果暂时不想调整类型逻辑,可以在告警行加单行注释关闭当前行的eslint校验:

// eslint-disable-next-line @typescript-eslint/no-explicit-any
export default async function fetcher<JSON = any>(
  input: RequestInfo,
  init?: RequestInit
): Promise<JSON> {
  const res = await fetch(input, init)
  return res.json()
}

内容的提问来源于stack exchange,提问作者P4nd4b0b3r1n0

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 17:06:04