Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[翻译] TypeScript 大法好! #1

Open
techird opened this issue Oct 30, 2015 · 10 comments
Open

[翻译] TypeScript 大法好! #1

techird opened this issue Oct 30, 2015 · 10 comments

Comments

@techird
Copy link
Owner

techird commented Oct 30, 2015

原文地址:https://medium.com/@vivainio/typescript-is-pretty-good-d8fecf80ea0c

概览:为什么说跟 ES6 比起来,TypeScript 更好呢?

好高兴,现在前端社区开始普遍接受转译的做法了(即把各种语法转换成 JS 执行)。虽然还是有部分 ES5 的死忠粉,但他们之中,有绝大部分在一旦在心里接受了 Crockford 的信仰之后,也会忘掉过往固执的经验并且开始转军接受。

大家都知道 ES6 相当牛逼。然而无论怎么牛逼的 ES6 始终有一样东西是给不了你的,那就是帮你检查你的代码是否正确——前人把这个叫做「汇编」或「类型检查」。打个比方,你在第 12 行实例化了类 Foo 的一个对象,ES6 在 13 行就会忘记提醒您这个对象有一个 bar() 方法。在 ES6 的规范下,你导入了你明确知道里面有什么的模块没有用,就是你明确暴露了想要暴露的变量也没有用。

一些代码检查工具可以帮你做一些弱弱的检查,但是它们一般也只是提示一下你该用单引号还是双引号(显然现在单引号比较受欢迎,虽然这是和祖先们写字符串的方法是相悖的)或者是提示你文件尾部缺少了一个空行。这种感觉就像用正则来解析 XML 树一样——一些看起来也挺正常的事儿,但是就是觉得哪儿不对劲。

TypeScript 的主张做的低调又有礼貌;但是你无法估计它们在技术主张上领先了 ES6 规范有多少年(函数式编程的程序员多年来一直处于养尊处优的状态,他们毫不在乎 ES6 跟 C#、Java 比起来就是毫无静态类型的概念)。TypeScript 也会指出 ES6 是很大的进步,但是同时指出,如果你进一步尝试一下 TypeScript 的一些小玩意的话,你会在工具化上面得到一些好处。

理性的工程师不可避免会因为下述原因而对 TypeScript 心存疑虑:

  • 这是未来的大势吗?如果我们选择 TypeScript,项目会不会被边缘化?
  • 如果使用的过程中碰到了什么跨不过去的坎怎么办?如果选择了之后,我们要承受到其设计不合理的恶果怎么办?

对于第一点,早些时候,我确实怀疑 TypeScript 是否能在社区势头大好的 CoffeeScript 上吸引到开发者。现在我在这谈笑风生,但是在 2012 年 TypeScript 刚发布那回,这个担忧并非毫无道理。当 TypeScript 1.5 发布(2015年春发布的 alpha 版)并且和 ES6 对齐后,这种担忧就释然了,就连 Angular 2 也从之前基于 traceur 的 AtScript 玩具转换到 TypeScript 的大阵营中。

对于第二点呢?TypeScript 到底「行不行」?

显然,可选强类型的特性可以让你慢慢的加上类型;应用中还没「准备好」的部分可以先不用加上类型,你的编译器也不会呜呜叫。我个人所见是,你慢慢把类型加上的时候,并不会被提示一些无法预料的问题;通常来说,你反而会抓出之前代码中还没被发现的 BUG。尽管你在你使用的类型定义文件有问题,你也可以转换成「any」类型,然后给 DefinitelyTyped 报告 bug 之后继续你的工作。

基本上,TypeScript 的类型系统想的很通透。它压根不是那种 18 岁的同学上传到 npm 的爱好项目可比的。它在付费项目上使用,人们的生计仰赖于它的稳定发布,所以它有微软付费的工程师进行质量保证以及代码评审。

TypeScript 能和 Flow 竞争吗(FaceBook 的一个类型推导引擎)?我们来探讨下最近 TypeScript 和 Flow 无处不在的争论:

  • Flow 的卖点是使用全局的类型推导,而不是基于你的严格类型定义。然而现在并没有其他语言走到这一步,Hindley-Milner(或类似的)类型推导只能在某些函数式编程语言中作为严格类型定义的附属;你还是需要在你 API 的关键位置上定义你的类型,然后类型推导才能玩起来。
  • TypeScript 在 Node 上托管;Flow 只是一个用于广泛分析 FaceBook 代码库的 unix 工具。你有可能也有可能不在 FaceBook 工作,但是通常情况下你都不在。

这里还有一个对 TypeScript 很不合理,但很重要的偏见——TypeScript 是微软搞的,微软是搞 Windows 的,而 Windows 很糟糕。

TypeScript,是基于 Node 构建的,显然是一个跨平台的项目。微软还在 Visual Studio Code 上花了很大精力,目的是为了给 TypeScript 有一流的、顶级的编辑体验(甚至超越 Windows 平台的 Visual Studio)。他们最近的开发团队已经基于 MIT License 开源发布了他们最大的工程成就(CoreCLR等)。这极有可能是他们在 2015 年及以后最为看重的事情。

毕竟,比 TypeScript 糟糕的多了去了,赌一把绝不吃亏。

补充:直接说 TypeScript 任何时候都是最佳选择也不恰当。如果你是「冲锋枪」,你应该对转译的使用没什么怨言;同样的,如果你只是做一些快速小巧的项目,可维护性和重构能力也不是你首要考虑的。

@zhe13
Copy link

zhe13 commented Oct 30, 2015

=-=可是我已经抛弃它了

@techird
Copy link
Owner Author

techird commented Oct 30, 2015

@zhe13 为什么呢?

@zhuangzhuang
Copy link

已经在学了, 打算在以后的项目中使用.

@zenany
Copy link

zenany commented Oct 31, 2015

赞,TS 是好东西,值得尝试。

@kidnes
Copy link

kidnes commented Nov 2, 2015

不看好,我用TS写了代码,最后还得转换成js上线、调试、部署,还不如直接写js

@agreatfool
Copy link

这里还有一个对 TypeScript 很不合理,但很重要的偏见——TypeScript 是微软搞的,微软是搞 Windows 的,而 Windows 很糟糕。
这哪里是偏见了:)

@techird
Copy link
Owner Author

techird commented Nov 2, 2015

@agreatfool 中国有句老话叫「对事不对人」,放在技术圈子,我们应该「对产品不对公司」。

@rocman
Copy link

rocman commented Nov 4, 2015

这个翻译神了~

@techird
Copy link
Owner Author

techird commented Nov 5, 2015

@zhangtaibai 可以转载,保留出处

@hkongm
Copy link

hkongm commented Nov 10, 2015

VSC很出色,但TS。。。
还是不敢上。。。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

8 participants