为啥下面这段代码 TS 不报错

rookiemaster · 2024-9-28 19:26:18 · 123 次点击
下面这段 TS 代码,ret 里面的数值是 1 ,所以返回的应该是 Promise<number>,不是要求的 Promise<loginResponseData>,为啥运行的时候没错.
```TypeScript
export function reqLogin(data: loginForm): Promise<loginResponseData> {
  const ret = request.post<any, loginResponseData>(API.LOGIN_URL, data)
  ret.then((result) => console.log(result)) // 1
  return ret
}
```

这是封装 axios 后, 响应拦截器的代码, 响应返回的 1
```TypeScript
request.interceptors.response.use(
  (response) => {
    const a: any = 1
    return a
  },
  (error) => {
    ElMessage('oops')
    return new Promise(error)
  }
)
```
举报· 123 次点击
登录 注册 站外分享
6 条回复  
Trim21 小成 2024-9-28 19:30:05
你这用的都是 any ,他咋报错。。。
nagisaushio 小成 2024-9-28 19:30:47
TS 只是编译期检查,没有运行时检查。
lisongeee 小成 2024-9-28 19:47:07
把你的 any 换成 unknown 就行了

---

理想情况下 ts 的代码不会出现 any

unknown 才是类型系统里的所有类的相交类/父类,就类似 java 里的 Object

any 可以看成所有类型的并类/子类,同时也是告诉 ts 编译器,any 相关的类型检查全忽略
renmu 该用户已被删除 2024-9-28 19:55:49
提示: 作者被禁止或删除 内容自动屏蔽
june4 小成 2024-9-28 22:50:20
ts 配置应该设置成出现 any 就报错,否则真的太容易以为是类型正确其实被 any 掩盖了
shizhibuyu2023 初学 2024-9-29 00:14:05
跟 any 、运行时什么的无关,最根本的原因是 request.interceptors.response.use() 中传的函数的类型推导不到或者说没有受约束于 request.post 函数的类型,这两者根本没有类型约束关系,自己点进去看下 Axios 这个类型就知道了
返回顶部