问题描述
typescript
项目在对接后端接口的时候需要为每个接口返回值定义类型吗?
现在很尴尬的是因为没有对接口定义类型,别的地方使用接口返回值时都是any
类型,感觉用了ts相当于没用=.=
typescript
项目在对接后端接口的时候需要为每个接口返回值定义类型吗?
现在很尴尬的是因为没有对接口定义类型,别的地方使用接口返回值时都是any
类型,感觉用了ts相当于没用=.=
我这边的方案是所有项目在UI设计完成后,前端自行mock开发,必须使用typescript,通过审核后将mock部分生成文档交给后端开发,后端API的参数和返回值格式必须与文档一致。
6 回答5.5k 阅读✓ 已解决
9 回答9.6k 阅读
3 回答10.6k 阅读✓ 已解决
4 回答7.6k 阅读
5 回答8.4k 阅读
2 回答10.5k 阅读✓ 已解决
2 回答12.8k 阅读✓ 已解决
对于这个问题,我的回答是:最好能定义!
但同时我也想说:很难!
就目前来说,从后端返回的都是数据,没有类型,所以默认情况下只能是
unknown
或者any
,虽然推荐前者,但是如果没有专门定义类型的话,最终还是要转为any
来使用,所以很多时候就干脆直接定义成any
了。假设,后端可以返回类型……那也只能是一个 schema,前端必须在运行时对它进行处理。然而,运行时只有 JavaScript,没有 TypeScript,所以这是一个伪命题。
那么前端应该怎么来定义返回数据的类型呢?最直接的办法,当然是看接口文档。正常情况下,接口文档里是肯定要清楚描述返回类型的 schema 的 …… 可惜的是,多数情况下都不是正常情况。所以前端只能通过其他手段、包括问、试、猜等,来定义这个类型。
说实在的,为每个返回定义类型好累的 —— 这也是前端不想定义类型的重要原因,恐怕也是目前这个问题问出来的重要原因。有没有办法呢?有!
如果后端也是 TypeScript……咋啥也不说了,把类型导出来用就是。
如果后端是动态类型语言,后端自己都不能确定类型,还能有啥办法?
如果后端是静态类型语言,比如 Java、C# 等,那每个接口的返回类型就是确定的。既然是确定的,就有准确的类型描述,比如类定义,或者 Swagger 自动分析出来的类型描述。既然有准确描述,那就可以通过“程序”来生成对应的 TypeScript 类型定义。程序员嘛,写个程序不是手到擒来的事儿。
当然,开发社区肯定找得到根据接口描述自动编写代码的东东,多半这些工具也是可以生成类型定义的 —— 只是我从来没去找过。
最后总结:应该为每个接口的返回值定义类型,但是——懒病不好治。