这个项目这样定义 Typescript 类型和使用,学到了,有几个问题?

83 天前
 tlerbao

我正在纠结后端 API 的类型怎么定义归类的好,看了这个项目,他讲后端所有类型定义在了一个 Api.d.ts 文件中,地址: https://github.com/soybeanjs/soybean-admin/blob/main/src/typings/api.d.ts

然后就类似下面这样使用。

菜鸟有几个问题:

1 、全写到一个文件是否可行,利弊?

2 、这么定义和使用是否是最佳方案,有和利弊?

3 、Typescrip 大神们都是怎么定义和使用的?

export function fetchGetUserList(params?: Api.SystemManage.UserSearchParams) {
  return request<Api.SystemManage.UserList>({
    url: '/systemManage/getUserList',
    method: 'get',
    params
  });
}
1704 次点击
所在节点    TypeScript
20 条回复
jerrry
83 天前
如果一个项目有 1000 个类型,都写到一个文件如何维护?
supuwoerc
83 天前
按照目录来建
zogwosh
83 天前
用 namespace,把类的 api 接口和类型放在一起,同时还能避免 ts 类型过多引起的编辑器性能问题
tlerbao
83 天前
@zogwosh 什么意思?分目录文件写会有性能问题?
tlerbao
83 天前
@zogwosh 哦你是说把类型和 api 调用写在一个文件?
SayHelloHi
83 天前
@tlerbao

老哥 和你遇到了同样的疑问

如果解决了这个问题 Append 一下

学习一下 个人也是新手 一边写一遍哭 写类型比写功能 都废时间
但是代码补全 用的真的很爽 😁
hua123s
82 天前
拜托这种东西不是应该自动生成?难道还手写?
https://github.com/acacode/swagger-typescript-api
https://github.com/anymaniax/orval
看看这些吧
nomagick
82 天前
看一下 github 的 npm 库, 他家的 api 都是生成了对应 d.ts 的
tlerbao
82 天前
@hua123s 不知道天下第一的后端 PHP 能不能这么生成。。。。
hua123s
82 天前
@tlerbao 是通过 swagger 生成的,php 有 swagger 吧
tlerbao
82 天前
@hua123s #10 简单搜了一下,是有 swagger-php 的,都是一个人做项目全栈,菜鸡,所以这些都没接触过,大致应该就是在控制器里写注解,然后通过类似 swagger-php 生成接口文档或 ts 类型啥的,对吧。
hua123s
82 天前
@tlerbao 额,你是自己全撸前后端。那没必要这样子了,php 不是很熟悉。我说的是前后端通过 swagger 沟通的情况。
hua123s
82 天前
@tlerbao 当然你也可以尝试给 php 加上 swagger ,这样至少不用太纠结 typescript 这边啦 233333
liuw666
82 天前
按模块和页面在一块,通用的往上提,反正我是这样写的
zogwosh
82 天前
@tlerbao #5
1. 不能写在同一个文件,因为变量和类型的数量会让你觉得无法维护
fd9xr
82 天前
swagger… 呕吐
fd9xr
82 天前
.d.ts 不是这么用的
tlerbao
82 天前
@fd9xr #17 那是怎么用的呢
ragnaroks
82 天前
文件夹做 namespace 分层和分拆,类似 go 的组织方式。很多项目(特别是前端)的 d.ts 是自动生成的。
dssxzuxc
24 天前
如果类型全是一次性生成的,全放一个文件没有任何问题,没必要考虑维护,毕竟是脚本生成的东西,要重构/修改都很简单。
如果无法一次性生成,或者考虑到频繁的单独维护,建议把文件拆开,用文件夹把不同模块的 api 分开
-- A
|-- index.ts
|-- type.d.ts
-- B
|-- index.ts
|-- type.d.ts
-- C
|-- index.ts
|-- type.d.ts

楼上说 d.ts 不是这样用的,确实有一定道理,之前接触到的项目接口类型定义都是写.ts 里的,但是如果不是太多人协作的话我还是强烈建议用 d.ts 方式,省了无数麻烦,只要 namespace 规划合理就行

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1016041

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX