typescript 里, 从后端接口获取的数据类型, 是声明全局类型呢, 还是模块类型呢

2022-07-23 10:34:05 +08:00
 bthulu

全局类型, 其他文件里用到的时候不用 import 声明文件, 直接用就是了. 模块类型的话, 其他文件里用到, 就必须 import 声明文件. 其他文件频繁用到的话, 是不是声明全局类型方便点? 但是我在 stackoverflow 上又看到有人说, 声明全局类型只用来处理安装的第三方依赖没有类型文件的情况. 自己 ts 代码中是不建议这么用的.

2425 次点击
所在节点    程序员
15 条回复
effort
2022-07-23 10:49:27 +08:00
mark 一下。同样想问问这个问题~! 我目前是 declare 的。
zcf0508
2022-07-23 10:57:16 +08:00
写局部,需要的时候编辑器自动引入
liuw666
2022-07-23 11:26:55 +08:00
非全局变量。全部用 export 导出, 然后用 import 导入。 我觉得自己写的代码一般情况下是不应该出现 全局声明的
liuw666
2022-07-23 11:29:59 +08:00
每一个类型,每一个函数都应该有他的作用域
GreatAuk
2022-07-23 11:47:17 +08:00
![]( https://utopia1994.oss-cn-shanghai.aliyuncs.com/img-bed/202207231144018.png)
写成全局的,外面再加个 namespace 防止和其他全局类型冲突。我这个是通过 swagger.json 自带生成的,要不手动维护后端接口类型还是很麻烦,且容易遗漏的。
EminemW
2022-07-23 12:06:52 +08:00
尽量避免使用全局
DOLLOR
2022-07-23 14:24:00 +08:00
用模块类型。
嫌 import 麻烦? vscode 会自动帮你插入 import 语句的。
CokeMine
2022-07-23 15:11:51 +08:00
@typescript-eslint/recommended 要求必须引入
caisanli
2022-07-23 18:50:35 +08:00
用 auto-service 生成的 模块类型
jason94
2022-07-23 19:33:47 +08:00
我会要求后端给 swagger 文档,然后生成 http 请求相关的代码,这里面就有 ts 类型了

https://github.com/zenghongtu/blog/issues/8
bthulu
2022-07-23 21:43:23 +08:00
@jason94 不觉得 swagger-codegen 生成的 js 客户端代码又臭又长么?
wktrf
2022-07-23 22:53:23 +08:00
@bthulu 可以自己做一个,我根据 Swagger 再结合自己封装的类似 react query 的 http 请求库写了一个生成工具,自动生成一个具备各种类型的 hooks ,每次发请求就是调用各个 hooks ,用起来非常舒服。可惜我自己写自己的东西更倾向使用 graphql
jason94
2022-07-24 23:04:20 +08:00
@bthulu 生成的 ts 代码是有点长,但是类型都是完整的,都用 react-query 封装好了,直接使用 hooks ,非常方便。而且后端改了什么接口,我重新生成一下就知道。至少我是很少跟后端去对接口了。
karott7
2022-07-25 09:54:22 +08:00
全局类型不能随便写吧,万一有冲突不太好。
我也用模块类型定义,然后 import
dssxzuxc
2022-07-25 13:44:07 +08:00
自己定一个不会重复的 namespace 就好了,作为库给别人使用的话类型需要单独的作用域,自己项目全局类型更方便

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

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

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

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

© 2021 V2EX