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

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

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

    我正在纠结后端 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
      });
    }
    
    20 条回复    2024-04-16 14:44:43 +08:00
    jerrry
        1
    jerrry  
       315 天前
    如果一个项目有 1000 个类型,都写到一个文件如何维护?
    supuwoerc
        2
    supuwoerc  
       315 天前
    按照目录来建
    zogwosh
        3
    zogwosh  
       315 天前
    用 namespace,把类的 api 接口和类型放在一起,同时还能避免 ts 类型过多引起的编辑器性能问题
    tlerbao
        4
    tlerbao  
    OP
       315 天前
    @zogwosh 什么意思?分目录文件写会有性能问题?
    tlerbao
        5
    tlerbao  
    OP
       315 天前
    @zogwosh 哦你是说把类型和 api 调用写在一个文件?
    SayHelloHi
        6
    SayHelloHi  
       315 天前
    @tlerbao

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

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

    学习一下 个人也是新手 一边写一遍哭 写类型比写功能 都废时间
    但是代码补全 用的真的很爽 😁
    hua123s
        7
    hua123s  
       315 天前 via Android   ❤️ 1
    拜托这种东西不是应该自动生成?难道还手写?
    https://github.com/acacode/swagger-typescript-api
    https://github.com/anymaniax/orval
    看看这些吧
    nomagick
        8
    nomagick  
       315 天前
    看一下 github 的 npm 库, 他家的 api 都是生成了对应 d.ts 的
    tlerbao
        9
    tlerbao  
    OP
       315 天前
    @hua123s 不知道天下第一的后端 PHP 能不能这么生成。。。。
    hua123s
        10
    hua123s  
       315 天前 via Android
    @tlerbao 是通过 swagger 生成的,php 有 swagger 吧
    tlerbao
        11
    tlerbao  
    OP
       315 天前
    @hua123s #10 简单搜了一下,是有 swagger-php 的,都是一个人做项目全栈,菜鸡,所以这些都没接触过,大致应该就是在控制器里写注解,然后通过类似 swagger-php 生成接口文档或 ts 类型啥的,对吧。
    hua123s
        12
    hua123s  
       315 天前 via Android
    @tlerbao 额,你是自己全撸前后端。那没必要这样子了,php 不是很熟悉。我说的是前后端通过 swagger 沟通的情况。
    hua123s
        13
    hua123s  
       315 天前 via Android
    @tlerbao 当然你也可以尝试给 php 加上 swagger ,这样至少不用太纠结 typescript 这边啦 233333
    liuw666
        14
    liuw666  
       315 天前 via iPhone
    按模块和页面在一块,通用的往上提,反正我是这样写的
    zogwosh
        15
    zogwosh  
       315 天前
    @tlerbao #5
    1. 不能写在同一个文件,因为变量和类型的数量会让你觉得无法维护
    fd9xr
        16
    fd9xr  
       315 天前 via iPhone
    swagger… 呕吐
    fd9xr
        17
    fd9xr  
       315 天前 via iPhone
    .d.ts 不是这么用的
    tlerbao
        18
    tlerbao  
    OP
       315 天前
    @fd9xr #17 那是怎么用的呢
    ragnaroks
        19
    ragnaroks  
       315 天前
    文件夹做 namespace 分层和分拆,类似 go 的组织方式。很多项目(特别是前端)的 d.ts 是自动生成的。
    dssxzuxc
        20
    dssxzuxc  
       256 天前
    如果类型全是一次性生成的,全放一个文件没有任何问题,没必要考虑维护,毕竟是脚本生成的东西,要重构/修改都很简单。
    如果无法一次性生成,或者考虑到频繁的单独维护,建议把文件拆开,用文件夹把不同模块的 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 规划合理就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2489 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 04:19 · PVG 12:19 · LAX 20:19 · JFK 23:19
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.