V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bthulu
V2EX  ›  程序员

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

  •  
  •   bthulu · 244 天前 · 2018 次点击
    这是一个创建于 244 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    15 条回复    2022-07-25 13:44:07 +08:00
    effort
        1
    effort  
       244 天前
    mark 一下。同样想问问这个问题~! 我目前是 declare 的。
    zcf0508
        2
    zcf0508  
       244 天前 via Android
    写局部,需要的时候编辑器自动引入
    liuw666
        3
    liuw666  
       244 天前 via iPhone
    非全局变量。全部用 export 导出, 然后用 import 导入。 我觉得自己写的代码一般情况下是不应该出现 全局声明的
    liuw666
        4
    liuw666  
       244 天前 via iPhone
    每一个类型,每一个函数都应该有他的作用域
    GreatAuk
        5
    GreatAuk  
       244 天前
    ![]( https://utopia1994.oss-cn-shanghai.aliyuncs.com/img-bed/202207231144018.png)
    写成全局的,外面再加个 namespace 防止和其他全局类型冲突。我这个是通过 swagger.json 自带生成的,要不手动维护后端接口类型还是很麻烦,且容易遗漏的。
    EminemW
        6
    EminemW  
       244 天前
    尽量避免使用全局
    DOLLOR
        7
    DOLLOR  
       244 天前
    用模块类型。
    嫌 import 麻烦? vscode 会自动帮你插入 import 语句的。
    CokeMine
        8
    CokeMine  
       244 天前 via Android
    @typescript-eslint/recommended 要求必须引入
    caisanli
        9
    caisanli  
       244 天前 via iPhone
    用 auto-service 生成的 模块类型
    jason94
        10
    jason94  
       244 天前
    我会要求后端给 swagger 文档,然后生成 http 请求相关的代码,这里面就有 ts 类型了

    https://github.com/zenghongtu/blog/issues/8
    bthulu
        11
    bthulu  
    OP
       244 天前
    @jason94 不觉得 swagger-codegen 生成的 js 客户端代码又臭又长么?
    wktrf
        12
    wktrf  
       244 天前
    @bthulu 可以自己做一个,我根据 Swagger 再结合自己封装的类似 react query 的 http 请求库写了一个生成工具,自动生成一个具备各种类型的 hooks ,每次发请求就是调用各个 hooks ,用起来非常舒服。可惜我自己写自己的东西更倾向使用 graphql
    jason94
        13
    jason94  
       243 天前
    @bthulu 生成的 ts 代码是有点长,但是类型都是完整的,都用 react-query 封装好了,直接使用 hooks ,非常方便。而且后端改了什么接口,我重新生成一下就知道。至少我是很少跟后端去对接口了。
    karott7
        14
    karott7  
       242 天前
    全局类型不能随便写吧,万一有冲突不太好。
    我也用模块类型定义,然后 import
    dssxzuxc
        15
    dssxzuxc  
       242 天前
    自己定一个不会重复的 namespace 就好了,作为库给别人使用的话类型需要单独的作用域,自己项目全局类型更方便
    关于   ·   帮助文档   ·   博客   ·   nftychat   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   实用小工具   ·   1655 人在线   最高记录 5556   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 46ms · UTC 17:09 · PVG 01:09 · LAX 10:09 · JFK 13:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.