V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
zxCoder
V2EX  ›  问与答

webstorm 写 nodejs,对象动态添加的的属性没有提示和自动补全怎么办

  •  
  •   zxCoder · 2020-12-04 08:57:42 +08:00 · 1631 次点击
    这是一个创建于 1452 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一个波浪线在那 看着好难受

    13 条回复    2020-12-04 12:17:23 +08:00
    maocat
        1
    maocat  
       2020-12-04 09:07:38 +08:00
    动态语言写习惯就好
    zxCoder
        2
    zxCoder  
    OP
       2020-12-04 09:15:19 +08:00
    @maocat 啊这 这么惨的吗 现在的 ide 不是挺智能的
    zachlhb
        3
    zachlhb  
       2020-12-04 09:21:37 +08:00 via Android
    @zxCoder 动态添加的属性啥 ide 都分析不出来,因为 ide 不会自己去跑你的程序,程序都没跑,当然扫描不出来你的属性
    BingoXuan
        4
    BingoXuan  
       2020-12-04 09:24:27 +08:00
    所以 typescript 真的是個好發明
    zxCoder
        5
    zxCoder  
    OP
       2020-12-04 09:25:27 +08:00
    @zachlhb 没有相关工具可以实时扫描源码,比如看这个对象在哪绑定了哪些新的属性吗
    zxCoder
        6
    zxCoder  
    OP
       2020-12-04 09:36:08 +08:00
    @BingoXuan ts 能解决这个问题吗?好奇
    noe132
        7
    noe132  
       2020-12-04 09:39:43 +08:00 via Android
    const p = confirm()
    if (p) obj[p] = 1

    你来分析分析 obj 对象有啥属性
    rbe
        8
    rbe  
       2020-12-04 09:40:32 +08:00
    @zxCoder #6 ts 写了类型声明,或者从上下文能推断出类型时,就可以提示。ts 对 jsdoc 支持也很好,在 vscode 里写 js + @type 声明为 ts 类型的 jsdoc,也能做到属性提示
    BingoXuan
        9
    BingoXuan  
       2020-12-04 09:47:28 +08:00
    @zxCoder
    ts 其實就是給動態語言加上靜態分析,讓你能在編寫程序時候做好一定約束,不容易出 bug 。這也就是為什麼我認為 python3.7 才是真正的 python3,因為有提供 typing hint 來做靜態分析。
    johnnyNg
        10
    johnnyNg  
       2020-12-04 10:11:31 +08:00
    上 ts
    Immortal
        11
    Immortal  
       2020-12-04 10:13:05 +08:00
    ts ts ts
    libook
        12
    libook  
       2020-12-04 10:44:23 +08:00
    为了提升代码可读性,也为了让 IDE 更准确识别对象结构,可以考虑把动态添加的属性做成确定性的,比如声明的时候就包含这个字段。
    用注释写好 JSDoc 、ESDoc,把具备哪些属性写清楚。
    或者使用 TS 的*.d.ts 文件( JS 项目也可以用),和上面方法一样都是让 IDE 知道对象有哪些属性。
    如果是公共库的话,可以在 Preferences =》 Languages & Frameworks =》 JavaScript =》 Libraries 里添加相应库的声明文件,实际上和用 TS 的*.d.ts 是等价的。很多人用 idea 一开始写项目连 Node 内置 API 都会有波浪线( WebStorm 可能不会有这个情况),需要在 Preferences =》 Languages & Frameworks =》 Node.js and NPM 里勾选 Coding assistance for Node.js 。
    zachlhb
        13
    zachlhb  
       2020-12-04 12:17:23 +08:00 via Android
    @zxCoder 没有,扫描的都是静态属性方法,你动态添加的扫描不到
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3590 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 11:12 · PVG 19:12 · LAX 03:12 · JFK 06:12
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.