flow.js/typescript 这类定义参数类型的意义何在

来源:互联网 发布:外汇行情数据分析 编辑:程序博客网 时间:2024/05/18 03:09
作者:vilicvane
链接:https://www.zhihu.com/question/28016252/answer/39056940
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其实大家基本都有答到了, 而且打开 TypeScript 官网焦点图里第一张的标题就是 Scalable. 最近用 TypeScript 写了一个客户端编译为 JS 大概一万行的手机 web 应用. 在这个数量级上, TypeScript 带来的好处已经是显而易见的了, 我再把其他大大的答案汇总一下.

1. 静态类型检查

静态类型检查可以避免很多不必要的错误, 不用在调试的时候才发现问题 (其实有的时候根本调试不出问题, 只是默默地把坑挖了, 说不定埋的就是个炸弹, 之前用 TypeScript 重写应用的服务器端程序, 写完之后就发现了不少暂时没有影响到运行的严重问题).

2. IDE 智能提示

在 TypeScript 这一类语言之前, JavaScript 的智能提示基本完全依赖 IDE 提供的猜测 (在猜测的质量上, Visual Studio 和 brackets 是我见过的最好的). 局限性就是, 这种猜测可能并不正确, 并且也缺乏更多的辅助信息, 所以要正确使用一个类库, 得不断地在文档和 IDE 之间切换, 影响心情和效率. 而 TypeScript 不仅自己写的类库有丰富的类型信息, 也可以对其他纯 JS 项目进行类型标注 (DefinitelyTyped), 便于使用者直接在 IDE 中浏览 API, 效率大增.

而对于自己的或者团队的代码, 好处也很明显. 团队的代码自己不一定能把各种接口记得滚瓜烂熟, 自己的代码如果规模大了也很难记全, 这个时候再去翻源文件,,, 啧啧啧.

3. 代码重构

且不说我这种经常纠结变量名的会时不时看某个变量名不顺眼, 改之的情况. 有时候的确需要修改一些变量/属性/方法名, 牵涉到属性和方法的时候, 很多改动是跨文件的, 不像普通变量可以简单定位 scope, 属性方法名的重命名对于 JS 来说异常痛苦, 一方面是修改本身就不方便, 另一方面是改了还不确定该改的是不是改了, 不该改的是不是也改了. 而 TypeScript 的静态类型系统就可以较为完美的解决这个问题 (这个地方还牵涉到一些最佳实践, 就暂不深入了).

4. 可读性

对于阅读代码的人来讲, 各种便利的类型一目了然, 更容易明白作者的意图.

--

其实在 TypeScript 之前, 自己也写了一个小库 (VEJIS), 进行 JS 在运行时的类型检查/增强, 实现了诸如增强的类, 函数重载, interface, delegate 等, 结合 Visual Studio 强大的智能感知和智能感知 API 还可以方便得注释各种重载并且转化为 signatures. 不过因为有了 TypeScript, 也就没有太多存在得价值了.

之前也有同学问为毛要写这么个东西, 其实还是为了 Scalable. 就跟总有同学会问 "类在实际生产中使用多不多" 这种问题一样, 只有等到你有了需求, 才能真正体会它们的价值.

本文地址:https://www.zhihu.com/question/28016252
原创粉丝点击