对于 ts 来说写 utils 模块的话是像强类型语言一样 public static 写法好还是直接 export 好 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
hikarugo

对于 ts 来说写 utils 模块的话是像强类型语言一样 public static 写法好还是直接 export 好

  •  
  •   hikarugo 2023 年 6 月 4 日 2987 次点击
    这是一个创建于 1057 天前的主题,其中的信息可能已经有所发展或是发生改变。

    export class Utils {
    public static f(){}
    }

    export function f(){}

    19 条回复    2023-06-05 12:44:50 +08:00
    crysislinux
        1
    crysislinux  
       2023 年 6 月 4 日 via Android
    看这些方法是不是有同一个归宿吧。我倾向于把 utils 分类,一个类别一个文件,然后导出方法
    optional
        2
    optional  
       2023 年 6 月 4 日 via iPhone   2
    直接导出,tree shacking
    ChefIsAwesome
        3
    ChefIsAwesome  
       2023 年 6 月 4 日
    当然直接 export 。简单就是美,搞什么花里胡哨的 class 。
    hsfzxjy
        4
    hsfzxjy  
       2023 年 6 月 4 日 via Android
    你 public static 还不如 namespace
    rabbbit
        5
    rabbbit  
       2023 年 6 月 4 日
    function foo() {}
    export {foo}

    import {foo} from 'util'
    // or
    import * as Util from 'util'
    codehz
        6
    codehz  
       2023 年 6 月 4 日
    直接 export 的话方便优化(
    最后打包的时候可能就只会留下用到的(
    弄成 class 的话,那整个 class 都要留下了
    flyqie
        7
    flyqie  
       2023 年 6 月 4 日 via Android   4
    怎么感觉你以前像是写 java 的。。

    万物都要来个 class ,真没必要这么干的。
    ochatokori
        8
    ochatokori  
       2023 年 6 月 4 日 via Android
    类是工具,不是形式
    35aZ4P8mT576683q
        9
    35aZ4P8mT576683q  
       2023 年 6 月 4 日
    如果 Utils 里面有 private static 方法 /属性我觉得没什么问题,因为这样以来 class 下的方法可以归到一起,而且 private 关键字比用不加 export 的函数更能清晰的表达出 do NOT use me outside 的含义
    IvanLi127
        10
    IvanLi127  
       2023 年 6 月 4 日 via Android
    简单的 utils 一般是一个个函数吧,直接 export 就好了。不是纯面向对象的语言,没必要被迫抽象。
    rb6221
        11
    rb6221  
       2023 年 6 月 4 日
    强类型感觉好一点吧 这些工具类一般都是写了就几乎不会改的,而且用到的地方很关键,所以需要比较严格的安全和可靠性保证
    Vegetable
        12
    Vegetable  
       2023 年 6 月 5 日
    为什么是 class...
    Trim21
        13
    Trim21  
       2023 年 6 月 5 日
    @liberty1900 这么一通操作没有意义....

    class 的 private 方法在忽略类型错误的情况下还是可以调用的,但是你用 es module 的话私有函数是直接 undefined 的
    35aZ4P8mT576683q
        14
    35aZ4P8mT576683q  
       2023 年 6 月 5 日
    @Trim21 private 关键字确实只是类型上的约束。不过我感觉通过 class 把相关方法归类到一起还是有好处的,如果函数比较多,直接向外面暴露容易造成混乱,特别是函数名比较长的时候。

    比如要 export 一堆和 time 相关的函数,其中两个是和 month 有关的:

    ```Javascript
    export function getNumberOfDaysInMonth(year: number, monthIndex: number)

    export function getNameOfMonth(monthIndex: number)
    ```

    直接向调用者暴露这些长函数名不那么友好,通过 class with static methods 就可以通过下面的方式调用:

    ```Javascript
    TimeUtils.Month.GetName
    TimeUtils.Month.GetNumberOfDays
    ```

    个人感觉这样更加优雅,只暴露一个 TimeUtils 给外面就够了,层级关系分明

    当然 class with static methods 和直接创建一个 object 没什么区别就是了
    hsfzxjy
        15
    hsfzxjy  
       2023 年 6 月 5 日 via Android   2
    @liberty1900 可以用 namespace
    YuTengjing
        16
    YuTengjing  
       2023 年 6 月 5 日 via Android   1
    java 是因为没法直接导出函数,啥都得用 class 封装,是没得选。
    justsosososo
        17
    justsosososo  
       2023 年 6 月 5 日
    相信 LZ 是个喜欢搞前戏的人。。。。。
    churchill
        18
    churchill  
       2023 年 6 月 5 日
    > Don't name code "Utils"
    &t=19s&ab_channel=CodeAesthetic
    codehz
        19
    codehz  
       2023 年 6 月 5 日
    @hsfzxjy ts 早就不推荐 namespace 了,之前 typescript compiler 内部改造,把 namespace 迁移到 esm (就直接导出的那种),性能快了好几个百分点
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1850 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 60ms UTC 16:14 PVG 00:14 LAX 09:14 JFK 12:14
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86