写点什么

再见 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:009086
用户头像

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

关注

评论

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

跟老表学云服务器开发专栏导航

老表

Python 内容合集 签约计划第二季 技术专题合集 跟老表学云服务器

python scrapy极细拆解,打开Spider类看内容,顺手爬了一下优设网

梦想橡皮擦

12月日更

大厂面试算法题之链表

程序员学长

Android C++系列:Linux网络(二)通信过程

轻口味

c++ android 28天写作 12月日更

如果TGO是经纪人,我们会怎么办?(9/28)

赵新龙

28天写作

Perforce用户文章转载:用了P4这一招,九成问题能自救

龙智—DevSecOps解决方案

报错 perforce

第三天用 Mac,我安装了这些玩意

悟空聊架构

Mac 28天写作 悟空聊架构 12月日更

全面解锁Kubernetes?百度爱番番技术实践全揭秘!

百度Geek说

百度 开源 Kubernetes 云原生 后端

了解 Flutter 的Timer类和Timer.periodic【Flutter专题19】

坚果

flutter 28天写作 签约计划第二季 12月日更

java开发之java开发环境的快速构建

@零度

Java java开发环境

架构师实战营模块一作业

圈圈gor

「架构实战营」

李飞飞力荐:阿里巴巴高可用数据库解决方案

博文视点Broadview

Go语言学习查缺补漏ing Day6

恒生LIGHT云社区

golang 编程语言

基于MRS-Hudi构建数据湖的典型应用场景介绍

华为云开发者联盟

数据仓库 数据湖 华为云 Apache Hudi MRS-Hudi

老大react说:schedule,我们今年的小目标是一个亿

全栈潇晨

React React Hooks

2.react心智模型(来来来,让大脑有react思维吧)

buchila11

React

【LeetCode】二叉搜索树中的搜索Java题解

Albert

算法 LeetCode 12月日更

高效设计一个LRU

bigsai

数据结构 算法 LRU

模块一课程作业

李晓笛

人人都能读懂的react源码解析(大厂高薪必备)

buchila11

React React Hooks

年度重磅!华为云2021应用构建技术实践精选集,免费下载!

华为云开发者联盟

数据库 大数据 云原生 数字化 华为云

【报名中】我们把你对 ShardingSphere 的好奇,都放在这场 Meetup 中

SphereEx

数据库 开源社区 ShardingSphere Meetup SphereEx

Go语言逆向技术:恢复函数名称算法

华为云开发者联盟

二进制 函数 go语言 逆向分析 恢复函数名称

通过接口上传文件到百度网盘

为自己带盐

28天写作 百度网盘 签约计划第二季 12月日更

dart系列之:浏览器中的舞者,用dart发送HTTP请求

程序那些事

flutter 浏览器 dart 程序那些事 12月日更

Flutter 详解 CupertinoSegmentedControl 分段控制器

阿策小和尚

28天写作 0 基础学习 Flutter 内容合集 签约计划第二季 12月日更

数据分析从零开始实战专栏导航@老表

老表

Python 数据库 数据分析 pandas 数据分析从零开始实战

管人理事

张老蔫

28天写作

给弟弟的信第7封|离开大学的喜与悲

大菠萝

28天写作

【量化】实战获取资产组合理论模型的数据源

恒生LIGHT云社区

资源 量化投资 量化

好习惯影响孩子的一生

Tiger

28天写作

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