TypeScript 压根就不是 Javascript 的超集,这是微软在忽悠程序员吗 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
hellowes
V2EX    TypeScript

TypeScript 压根就不是 Javascript 的超集,这是微软在忽悠程序员吗

  •  
  •   hellowes 2019 年 2 月 11 日 9161 次点击
    这是一个创建于 2525 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近 Vue3 要用 TypeScript 重写,一时之间我感到焦虑。虽然快学不动了,但是还是想把平时的 Javascript 插件,Vue 页面之类的转移到 TypeScript 架构上。

    之前一直久仰大名,说 T 是 JS 的超集,我差点就信了,事实证明,他们不是完全语言兼容的!不信看下面这段 JS 的代码:

     var saveRef = setTimeout(()=>{ var value = { username: 'test123', password: 1234 }; $.ajax({ url: "/opread/get_auth", data: JSON.stringify(value), .... }) },3000) 

    在 tsc 下,我尝试将这段代码在 ts 下运行,并且成功发出一个 ajax。

    结果 tsc 提示我 saveRef,value 都需要定义:any,甚至函数也要定义返回值。虽然我知道这是 ts 的特点,但是这完全不符合他说的超集。我的旧代码有 N 多这种无定义的情况,难道我都需要一个个去改?太费劲了,查很多配置都没提及,所以发帖想问一下各位 V 友如何解决升级的问题

    29 条回复    2019-02-12 16:42:10 +08:00
    azh7138m
        1
    azh7138m  
       2019 年 2 月 11 日 via Android   5
    先上文档 https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
    noImplicitAny 配置的啥?每个 strict 又配置的啥?你自己配置的去怪 tsc,
    tsc:我不是 我没有 你别瞎说啊
    wszgrcy
        2
    wszgrcy  
       2019 年 2 月 11 日 via Android
    楼主在钓鱼
    chemzqm
        3
    chemzqm  
       2019 年 2 月 11 日   2
    多实践下你才能体会到 ts 的优势,这种前端页面基本没有重写的必要性
    murmur
        4
    murmur  
       2019 年 2 月 11 日
    ts 配合 angular 不错 就包括 vue 我拿 es5 都不存在什么问题
    murmur
        5
    murmur  
       2019 年 2 月 11 日
    *react
    90928yao
        6
    90928yao  
       2019 年 2 月 11 日
    你怕是对 超集 和 子集 有什么误解
    mmdsun
        7
    mmdsun  
       2019 年 2 月 11 日 via Android
    动态一时爽,重构火葬厂。大项目才能体现出 typescript 的优势。
    tanszhe
        8
    tanszhe  
       2019 年 2 月 11 日
    typescript 有可能会重新造个运行时 , 不用 v8。
    azh7138m
        9
    azh7138m  
       2019 年 2 月 11 日 via Android
    @tanszhe 你们媒体记者,跑的比谁都快,你说这话是要负泽任的。引用开源呢?
    Rocka
        10
    Rocka  
       2019 年 2 月 11 日
    @azh7138m #9 可能是在说 deno 吧 ... 不过并不是 TypeScript 造的
    Sapp
        11
    Sapp  
       2019 年 2 月 11 日
    @mmdsun 小项目也照样能的,特别是现在 vscode 搭配 ts,最起码你写个函数不操心补全函数参数,函数参数类型这种问题了,调用方法直接输入名字,会自动导入对应的函数,比 js 方便多了。
    lxml
        12
    lxml  
       2019 年 2 月 11 日 via Android
    @tanszhe 大概率还是 v8,不过是编译成 wasm 再利用 v8 的 runtime,写个运行时太蛋疼了,之前还可以指望微软,现在 edge 都靠拢 chrome 了,个人觉得投入人力不会干这种事了
    learnshare
        13
    learnshare  
       2019 年 2 月 11 日
    回去继续学,继续写吧
    zhwithsweet
        14
    zhwithsweet  
       2019 年 2 月 11 日
    @mmdsun #7 咳咳,ts 虽好。可是前端项目重构有点不现实,我经历的都是重写。或者项目还没完,就换工作了,重构至今没遇到过,有空才能打算搞搞。
    azh7138m
        15
    azh7138m  
       2019 年 2 月 11 日 via Android
    @lxml 那个是 EdgeHTML 换 Blink,你们不要见得风是得雨

    ts 投入可是非常大的,一些重要特性都是 Anders 老爷子亲自写的( 96 年 300w 刀年薪)
    sneezry
        16
    sneezry  
       2019 年 2 月 11 日 via iPhone   3
    理解楼主的心情。但是 ts 入门也没那么简单。原生 js 在 ts 下确实可以做到兼容,但是默认的 tsconfig 不行,的自己改。默认配置不支持的地方就是 ts 认为 js 不好的地方。如果想入 ts 的坑,建议放平心态,认真思考 ts 的“无理”要求。
    bumz
        17
    bumz  
       2019 年 2 月 11 日   1
    建议把标题改成:
    「默认配置下的 ts 不是 Javascript 的超集,这是微软在忽悠程序员吗」
    ianva
        18
    ianva  
       2019 年 2 月 11 日   1
    ["我感到焦虑", "虽然快学不动了", "一直久仰大名", "我差点就信了", "难道我都需要一个个去改", "太费劲了"]
    基于焦虑的 TS 学习实践,这开始就是从入门到放弃的节奏
    geelaw
        19
    geelaw  
       2019 年 2 月 11 日   1
    @90928yao #6 虽然楼主的错误在于没有认识 TypeScript 有严格配置,但是他对超集、子集的理解没什么问题。你应该检查你对超集、子集的理解。
    nakupanda
        20
    nakupanda  
       2019 年 2 月 11 日
    推荐使用 vanillajs
    90928yao
        21
    90928yao  
       2019 年 2 月 11 日
    @geelaw 哈哈 不好意思 丢人了 我没好好读题,会错他意思了
    cleveryun
        22
    cleveryun  
       2019 年 2 月 11 日
    TS 可以配置的,报错提示归提示,但是照样可以编译运行的。另外,TS 也支持类似 JSDOC 代码注释来进行类型判断。
    cleveryun
        23
    cleveryun  
       2019 年 2 月 11 日
    不想看报错就需要用 TS 对整个项目都重构掉,对老项目是比较激进,在对项目不熟悉的情况下重构风险还是比较大的,平稳过渡到类型判断的话,可以用 facebook 出的 flow,flow 在正式项目里用是没问题的,以前有在一个国内大型保险公司的某个外包团队里呆过几个月,那个项目好几年了,一直是用 flow 做类型检测的。
    quinoa42
        24
    quinoa42  
       2019 年 2 月 12 日 via Android
    ts 的真正意义也不是在于做 js 超集,而是相对 type safe,减少深坑数量
    比如之前有过讨论的 t/519845
    可以在 ts 里试试效果
    GiantHard
        25
    GiantHard  
       2019 年 2 月 12 日
    @mmdsun 大项目的话,VSCode TS LSP 经常崩溃。。。
    wizardoz
        26
    wizardoz  
       2019 年 2 月 12 日
    @quinoa42 还有一个很大的意义是对 IDE 更友好
    shunia
        27
    shunia  
       2019 年 2 月 12 日
    @GiantHard 我 8G 内存而已,没遇到过崩的项目.是不是你电脑的问题?
    另外 TS LSP 是什么?
    edsheeran
        28
    edsheeran  
       2019 年 2 月 12 日 via iPhone
    钓鱼执法
    GiantHard
        29
    GiantHard  
       2019 年 2 月 12 日
    @shunia 我是 16 G 的 mbp,经常代码写着写着 TypeScript Language Service 就开始出各种各样的毛病(包括但不限于类型提示无法加载,错误信息乱报等),最后还是 JB 的 IDE 最稳。。。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2637 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 29ms UTC 04:05 PVG 12:05 LAX 20:05 JFK 23:05
    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