TS 中的interface有必要约束每一个属性吗

通常会使用一个interface来约束一个http请求的返回数据,如下

interface IResponseData<T> {
  code: number;
  message?: string;
  data: T;
}

然后会再使用一个interface来约束data,假如data是一个非常复杂的对象,有必要在interface中约束它的每一个属性吗?
疑惑的原因是,如果约束每一个属性,这个interface也会非常复杂,而写成any就缺失了类型推导?
想了解在实际的生产项目中,大家是如何处理的?

阅读 3.7k
2 个回答

没啥好办法, 前端自己一个一个接口约束返回值类型, 要么人工自己一个一个定义, 要么就需要借助一下工具库,还要看你们后端是什么, 还有java的swaggerui转ts接口声明的,乱七八糟的。前端不写库的话 用ts的还是少,但是ts确实太香了

  1. 如果约束每一个属性,这个interface也会非常复杂,有必要在interface中约束它的每一个属性吗?

要的,毕竟写 interface 的目的就是这个。如果后端给你的数据真的很复杂(且不谈是不是接口设计上的问题),你又没写 interface 的话,就要抓瞎了。不管是跑起来F12看看还是问后端、查文档,都很麻烦。

  1. 想了解在实际的生产项目中,大家是如何处理的?

个人经历的场景是 grpc+grpc-gateway,手写了了一个 protoc 插件去生成 typescript interface。

对其他的后端技术栈也有 swagger 和其他替代物,但主要看后端有没有这个意识。要是你们后端开发写得很随便,文档又烂的话,前端也真的没啥省心的办法。

如果后端能给前端 swagger/proto 或者别的 api 定义的文档的话,起码还有个自己生成接口代码的可能性嘛。

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