请问老师接口返回的数据是否应该有约束

来源:19-6 配置数据持久化功能并测试后端接口

Panda_io

2023-07-03

我的登录返回如下

{
  "code": 200,
  "msg": "success",
  "data": {
    "token": "12868674e54b4fc896ff58c04355c080"
  }
}

我的login判断逻辑需要这样写,里面有很多unknow,我理解这里并没有做类型约束,是否此处应该定义一个接口返回的 type = {xxx},然后直接用 “.” 进行调用,我这样太复杂了,而且感觉是为了避免TS约束而写成unknow,个人看法,还请老师点拨一下,要是接口返回的层级多一些,一直写unnkow感觉很奇怪

export default function Login() {
  const token = useSelector((state: RootState) => state.user.token)
  const dispatch = useAppDispatch()

  const handleLogin = (params:any) => {
    dispatch(loginAction({username: 'panda', password: '222'})).then((action) => {
      const data = (action.payload as {[index: string]: unknown}).data
      const code = (data as {[index:string]: unknown}).code
      const dataInfo = (data as {[index:string]: unknown}).data
      const token = (dataInfo as {[index:string]: unknown}).token
      if(code === 200 && typeof token === 'string' ){
        dispatch(updateToken(token))
        message.success('登录成功');
      }
      else{
        message.error('登录失败');
      }
    })
  }

  return (
    <div>
      Login <br />
      <Button onClick={handleLogin}>登录</Button>
      {token}
      </div>
  )
}
写回答

1回答

西门老舅

2023-07-03

你好,

首先后端数据是否要进行类型约束,这个看团队情况而定,可以约束也可以不约束。后端数据经常要改变,所以约束会加大开发成本。

如果感觉unknow使用不方便,可以换成any类型。

其实TS最大的类型限定并不是后端数据,而是前端的核心方法的限制,以及组件通信的限定。

0
1
Panda_io
老师说得很好,明白了,谢谢!
2023-07-03
共1条回复

Vue3 + React18 + TS4入门到实战 系统学习3大热门技术

专为初级前端人员设计,系统性学习三大技术

261 学习 · 182 问题

查看课程