typescript项目在对接后端接口的时候需要为每个接口返回值定义类型吗?

问题描述

typescript项目在对接后端接口的时候需要为每个接口返回值定义类型吗?

现在很尴尬的是因为没有对接口定义类型,别的地方使用接口返回值时都是any类型,感觉用了ts相当于没用=.=

image.png

阅读 4.9k
2 个回答

对于这个问题,我的回答是:最好能定义!

但同时我也想说:很难!

就目前来说,从后端返回的都是数据,没有类型,所以默认情况下只能是 unknown 或者 any,虽然推荐前者,但是如果没有专门定义类型的话,最终还是要转为 any 来使用,所以很多时候就干脆直接定义成 any 了。

假设,后端可以返回类型……那也只能是一个 schema,前端必须在运行时对它进行处理。然而,运行时只有 JavaScript,没有 TypeScript,所以这是一个伪命题。

那么前端应该怎么来定义返回数据的类型呢?最直接的办法,当然是看接口文档。正常情况下,接口文档里是肯定要清楚描述返回类型的 schema 的 …… 可惜的是,多数情况下都不是正常情况。所以前端只能通过其他手段、包括问、试、猜等,来定义这个类型。

说实在的,为每个返回定义类型好累的 —— 这也是前端不想定义类型的重要原因,恐怕也是目前这个问题问出来的重要原因。有没有办法呢?有!

如果后端也是 TypeScript……咋啥也不说了,把类型导出来用就是。

如果后端是动态类型语言,后端自己都不能确定类型,还能有啥办法?

如果后端是静态类型语言,比如 Java、C# 等,那每个接口的返回类型就是确定的。既然是确定的,就有准确的类型描述,比如类定义,或者 Swagger 自动分析出来的类型描述。既然有准确描述,那就可以通过“程序”来生成对应的 TypeScript 类型定义。程序员嘛,写个程序不是手到擒来的事儿。

当然,开发社区肯定找得到根据接口描述自动编写代码的东东,多半这些工具也是可以生成类型定义的 —— 只是我从来没去找过。

最后总结:应该为每个接口的返回值定义类型,但是——懒病不好治。

我这边的方案是所有项目在UI设计完成后,前端自行mock开发,必须使用typescript,通过审核后将mock部分生成文档交给后端开发,后端API的参数和返回值格式必须与文档一致。

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