我正在纠结后端 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
});
}
![]() |
1
jerrry 2024-02-17 19:40:29 +08:00
如果一个项目有 1000 个类型,都写到一个文件如何维护?
|
![]() |
2
supuwoerc 2024-02-17 19:43:41 +08:00
按照目录来建
|
3
zogwosh 2024-02-17 19:49:21 +08:00
用 namespace,把类的 api 接口和类型放在一起,同时还能避免 ts 类型过多引起的编辑器性能问题
|
![]() |
6
SayHelloHi 2024-02-17 20:33:15 +08:00
|
![]() |
7
hua123s 2024-02-17 21:08:55 +08:00 via Android ![]() 拜托这种东西不是应该自动生成?难道还手写?
https://github.com/acacode/swagger-typescript-api https://github.com/anymaniax/orval 看看这些吧 |
![]() |
8
nomagick 2024-02-17 21:11:36 +08:00
看一下 github 的 npm 库, 他家的 api 都是生成了对应 d.ts 的
|
![]() |
11
tlerbao OP @hua123s #10 简单搜了一下,是有 swagger-php 的,都是一个人做项目全栈,菜鸡,所以这些都没接触过,大致应该就是在控制器里写注解,然后通过类似 swagger-php 生成接口文档或 ts 类型啥的,对吧。
|
![]() |
12
hua123s 2024-02-17 21:48:29 +08:00 via Android
@tlerbao 额,你是自己全撸前后端。那没必要这样子了,php 不是很熟悉。我说的是前后端通过 swagger 沟通的情况。
|
![]() |
13
hua123s 2024-02-17 21:50:08 +08:00 via Android
@tlerbao 当然你也可以尝试给 php 加上 swagger ,这样至少不用太纠结 typescript 这边啦 233333
|
14
liuw666 2024-02-17 21:52:29 +08:00 via iPhone
按模块和页面在一块,通用的往上提,反正我是这样写的
|
16
fd9xr 2024-02-18 06:29:13 +08:00 via iPhone
swagger… 呕吐
|
17
fd9xr 2024-02-18 06:49:29 +08:00 via iPhone
.d.ts 不是这么用的
|
![]() |
19
ragnaroks 2024-02-18 10:00:34 +08:00
文件夹做 namespace 分层和分拆,类似 go 的组织方式。很多项目(特别是前端)的 d.ts 是自动生成的。
|
![]() |
20
dssxzuxc 308 天前
如果类型全是一次性生成的,全放一个文件没有任何问题,没必要考虑维护,毕竟是脚本生成的东西,要重构/修改都很简单。
如果无法一次性生成,或者考虑到频繁的单独维护,建议把文件拆开,用文件夹把不同模块的 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 规划合理就行 |