写点什么

再见 CoffeeScript,你好 TypeScript

  • 2015-10-29
  • 本文字数:1029 字

    阅读完需:约 3 分钟

在网页应用的开发方面,CoffeeScript 曾经为广大程序员提供了很好的帮助。然而,微软公司推出的 TypeScript 正在超越 CoffeeScript 成为大家的首选。

作为一个在 2009 年出现的语言,CoffeeScript 目前已经十分成熟。它给为用户提供了很多的语法糖以及基于类的继承,却又保证了尽量简洁的语法。而且,其流行程度为团队之间的高效交流提供保证。然而,CoffeeScript 也存在一些很难解决的问题。Heap 的软件工程师 Jiawei Li 表示,CoffeeScript 至少存在三个方面的缺点。首先,CoffeeScript 中的变量初始化和重新赋值很容易出现混淆。由于变量不需要声明,在内层函数新定义的变量可能和已有的外部变量重名,造成程序执行混乱。其次,CoffeeScript 中强大的?操作符使得加大了阅读代码的难度。使用?来代替null/undefined的确可以简化代码,但编程人员却使得阅读代码变得困难。最后,CoffeeScript 模糊的语法定义使得编译后程序的行为无法掌控。以foo bar and hello world为例,其编译后的结果就可以是foo(bar) && hello(world)或者foo(bar && hello(world))

Jiawei 表示,企业目前对相关编程语言的核心关注点主要集中在两个方面——代码的易读性和易于快速开发。代码易读保证了调试工作可以高效进行;易于开速开发则保证了产品的发布时间。CoffeeScript 的缺点正好刺到了企业的痛点。因此,TypeScript 一经推出便迅速崛起。

TypeScript 的优点包括:支持可选的静态类型和基于类的面向对象编程、内置的类型注解保证了代码编译时的正确性、版本更新速度很快以及支持在第三方 JavaScript 中增加类型等。尽管 TypeScript 还存在不成熟的地方(如与 ES6 的兼容性方面),其特性很好的保证了大规模 JavaScript 应用开发的效率。未来,TypeScript 必然会有进一步更好的表现。

最后,Jiawei 也指出了一些 TypeScript 有待改进的地方。TypeScript 还欠缺模式匹配和隐式转换等语言特性。而且,针对变量的取值为 null 或者 undefined 的情况,TypeScript 还没不能很好的进行处理。JiaWei 建议,可以添加更多的类型机制来解决该问题。其中包括使用Options来决定是否允许变量为null/undefined、使用Trys来声明事情成功或失败以及使用FuturesPromises来声明异步操作成功或失败等。


感谢徐川对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们,并与我们的编辑和其他读者朋友交流(欢迎加入 InfoQ 读者交流群)。

2015-10-29 19:008671
用户头像

发布了 268 篇内容, 共 125.6 次阅读, 收获喜欢 24 次。

关注

评论

发布
暂无评论
发现更多内容

现在面试这么难,背下题就能过的时代一去不复返了

小谈

Java 面试 JVM springboot SpringCloud

从Servlet到Spring Boot

废材姑娘

Java Spring Boot

GeekPwn 2020少年黑客马拉松大赛即将开启 谁将CARRY全场?

Geek_116789

面试官:为什么需要happens-before规则和什么是指令重排序

无予且行

Java 编程 程序员 面试 happens-before

小白也有大厂梦,如何从零开始掌握高薪Java工程师必备技能?

无予且行

Java 架构 面试 后端 大厂

架构训练营第五周 - 总结

无心水

极客大学架构师训练营

Raft探索历程--Part2

老胡爱分享

分布式系统 raft

Git 的远端操作及解析(含思维导图)

多选参数

git GitHub gitlab

碎片化学习行不行

封不羁

Java线程池最细的解释,看完后彻底征服面试官

小新

Java 架构 面试 线程 线程池

如果张东升是个程序员

程序员生活志

程序员 张东升

架构师训练营 第5课学习总结

Glowry

极客大学架构师训练营

视读——沟通的艺术,看入人里,看出人外(开篇)

废材姑娘

读书笔记 视觉笔记

道路千万条,安全只三条

石君

安全评估 安全设计

Java程序员的必修课之Spring理解透彻了吗?不会还咋去面试?

犬来八荒

Java spring 面试 后端 框架

一致性哈希 -- java 实现

lei Shi

【Python】 any() 和 or 区别你真的知道吗?

Leetao

Python 数据结构 Python基础知识

它们为什么这么快:从多进程到多线程再到I/O复用

Ya

多线程 进程 并发

Hexo blog 创建指导手册

想飞的鱼

GitHub Hexo GitHub Pages Blog

区块链系列教程之:比特币的问题

程序那些事

比特币 区块链 智能合约 以太坊

重学 Java 设计模式:实战策略模式「模拟多种营销类型优惠券,折扣金额计算策略场景」

小傅哥

Java 设计模式 小傅哥 重构 代码优化

JVM中的双亲委派机制你还没懂吗?

阿文

Java JVMTI JVM 深入理解JVM JVM原理

依赖倒置原则

John

极客大学架构师训练营

架构训练营第五周 - 作业

无心水

极客大学架构师训练营

架构师训练营学习总结

John

极客大学架构师训练营

三十张图助你看清红黑树的前世今生

淡蓝色

Java 程序员 数据结构 算法

针对GPU单指令多数据流的编译优化算法

GPU

gpu 编译器 程序语言 if-conversion

有了多线程,为什么还要有协程?

八两

线程 进程 协程 GMP 进程线程区别

公司一直用Mybatis的原因原来在这!不得不竖起我的大拇指

小闫

Java mybatis mybatis-config.xml mybatis缓存

刚去面试现场聊了一个多小时的Redis ,悄悄分享给大家!

Java小咖秀

nosql redis 面试

[1.3万字] 玩转前端二进制

阿宝哥

Java 大前端 base64 Blob

再见CoffeeScript,你好TypeScript_JavaScript_张天雷_InfoQ精选文章