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

2019-02-11 14:54:12 +08:00
 hellowes

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

之前一直久仰大名,说 TS 是 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 友如何解决升级的问题

8364 次点击
所在节点    TypeScript
29 条回复
90928yao
2019-02-11 17:44:56 +08:00
@geelaw 哈哈 不好意思 丢人了 我没好好读题,会错他意思了
cleveryun
2019-02-11 23:25:01 +08:00
TS 可以配置的,报错提示归提示,但是照样可以编译运行的。另外,TS 也支持类似 JSDOC 代码注释来进行类型判断。
cleveryun
2019-02-11 23:29:43 +08:00
不想看报错就需要用 TS 对整个项目都重构掉,对老项目是比较激进,在对项目不熟悉的情况下重构风险还是比较大的,平稳过渡到类型判断的话,可以用 facebook 出的 flow,flow 在正式项目里用是没问题的,以前有在一个国内大型保险公司的某个外包团队里呆过几个月,那个项目好几年了,一直是用 flow 做类型检测的。
quinoa42
2019-02-12 02:09:23 +08:00
ts 的真正意义也不是在于做 js 超集,而是相对 type safe,减少深坑数量
比如之前有过讨论的 https://www.v2ex.com/t/519845
可以在 ts 里试试效果
GiantHard
2019-02-12 09:36:27 +08:00
@mmdsun 大项目的话,VSCode TS LSP 经常崩溃。。。
wizardoz
2019-02-12 11:09:44 +08:00
@quinoa42 还有一个很大的意义是对 IDE 更友好
shunia
2019-02-12 12:33:56 +08:00
@GiantHard 我 8G 内存而已,没遇到过崩的项目.是不是你电脑的问题?
另外 TS LSP 是什么?
edsheeran
2019-02-12 13:06:37 +08:00
钓鱼执法
GiantHard
2019-02-12 16:42:10 +08:00
@shunia 我是 16 G 的 mbp,经常代码写着写着 TypeScript Language Service 就开始出各种各样的毛病(包括但不限于类型提示无法加载,错误信息乱报等),最后还是 JB 的 IDE 最稳。。。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/533938

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX