QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

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

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

关注

评论

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

C#入门系列(十九) -- 作用域、生命期和析构函数

陈言必行

C# 6月月更

读书笔记之:如何有效阅读

甜甜的白桃

读书笔记 读书 笔记 6月月更

linux常用命令

乌龟哥哥

6月月更

市场冷空气来袭,SeekTiger如何逆流而上?

股市老人

有爱无碍,科技为他们点亮漫天星光

脑极体

硬核干货:6000字 30张图,带你彻底搞懂BGP动态路由!

wljslmz

BGP 网络技术 动态路由 6月月更

JVM调优简要思想及简单案例-对象的回收与保留

zarmnosaj

6月月更

作为神经搜索生态的开创者,Jina AI 在做什么?

Jina AI

Python 深度学习 开源 云原生 搜索

☕️Java11 中基于嵌套关系的访问控制优化

看山

Java Java11

如何为 SAP 电商云每个不同的 JavaScript Storefront 分别配置 API endpoint

汪子熙

SAP Hybris commerce 电商云 6月月更

【Python技能树共建】with...as... 实战

梦想橡皮擦

Python 6月月更

如何利用 RPA 实现自动化获客?

程序员泥瓦匠

RPA

微服务稳定性保障

阿泽🧸

微服务 6月月更

Java Core 「11」AQS-AbstractQueuedSynchronizer

Samson

学习笔记 Java core 6月月更

spring4.1.8扩展实战之八:Import注解

程序员欣宸

Java spring Spring Framework 6月月更

Linux开发_网络编程基础(1)

DS小龙哥

6月月更

SDN系统方法 | 8. 网络虚拟化

俞凡

架构 网络 sdn SDN系统方法

Docker 实用技巧三

Nick

Docker 容器 实用技巧 6月月更 实操

BOM

Jason199

js BOM 6月月更

Apipost=Postman+Swagger+Mock+流程测试?

Xd

Java 后端 接口测试

【Spring 学习笔记(十三)】Spring AOP 五大通知类型

倔强的牛角

Java spring spring aop 6月月更

连续居家办公68天后——我的2022居家办公所感所想| 社区征文

No Silver Bullet

居家办公 6月月更 初夏征文 心得体会

leetcode 64. Minimum Path Sum 最小路径和(中等)

okokabcd

LeetCode 动态规划 数据结构与算法

流数据操作

Damon

6月月更

周末来学集合论

坚果

6月月更

Vue-14-列表渲染v-for

Python研究所

6月月更

InfoQ 极客传媒 15 周年庆征文|Vim 常用快捷键

耳东@Erdong

vim 运维 快捷键 6月月更 InfoQ极客传媒15周年庆

A16Z : Web3生态全景概览

Dream

Web3.0

【愚公系列】2022年06月 通用职责分配原则(七)-纯虚构原则

愚公搬代码

6月月更

读书笔记之:你当象鸟飞往你的山

甜甜的白桃

读书笔记 读书 笔记 6月月更

DOM核心——Document类型

大熊G

JavaScript 前端 6月月更

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