写点什么

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

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

关注

评论

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

社招前端必会手写面试题集锦

helloworld1024fd

JavaScript

对比开源丨Prometheus 服务多场景存储压测全解析

阿里巴巴云原生

阿里云 开源 云原生 Prometheus

FL Studio最新发布21中文正式版本下载

茶色酒

FL Studio 21

统一观测丨使用 Prometheus 监控云原生网关,我们该关注哪些指标?

阿里巴巴云原生

阿里云 云原生 Prometheus 云原生网关

手撕常见JS面试题

helloworld1024fd

JavaScript

中文技术文档的写作规范参考

面向工资Coding

ReactDOM.render在react源码中执行之后发生了什么?

flyzz177

React

产品团队业务思维的重要性

Bruce Talk

敏捷 Agile

React源码分析(三):useState,useReducer

goClient1992

React

JavaScript刷LeetCode心得

js2030code

JavaScript LeetCode

Portraiture2023最新版本下载安装图文教程

茶色酒

Portraiture Portraiture4

建议收藏,轻松搞懂区块链!

蔡农曰

比特币 区块链 后端 比特币区块链

用javascript分类刷leetcode17.栈(图文视频讲解)

js2030code

JavaScript LeetCode

会声会影2023官方正式版本功能介绍

茶色酒

会声会影2023

美团前端一面手写面试题

helloworld1024fd

JavaScript

React源码分析(二)渲染机制

goClient1992

React

应对ChatGPT,中国AI需要这三种能力

脑极体

百度 飞桨 文心

快速制作一个chrome插件

JYeontu

chrome Vue chrome扩展 Chrome插件

React源码解读之React Fiber

flyzz177

前端工程师leetcode算法面试必备-简单的二叉树

js2030code

JavaScript LeetCode

架构误区系列13:令人迷惑的继承

agnostic

继承

2023-02-19:请用go语言调用ffmepg,输出视频文件信息。

福大大架构师每日一题

golang ffmpeg 福大大

React源码分析1-jsx转换及React.createElement

goClient1992

React

云计算未来 5 年发展方向大盘点

亚马逊云科技 (Amazon Web Services)

人工智能

React Context源码是怎么实现的呢

flyzz177

React

拆分电商系统为微服务

Geek_7d539e

信源分类及数学模型

timerring

信息 信息论 信息论与编码

LeetCode:240. 搜索二维矩阵 II,直接查找,详细注释

Lee Chen

JavaScript 算法 LeetCode

架构实战营10期-作业7

炮仗

CnosDB成为首个产品支持SQLancer的云原生时序数据库

CnosDB

时序数据库 开源社区 CnosDB 工程师有话说

「 Java基础-链式调用 」Java开发中如何让你的代码看起来更优雅?试试链式调用?

小刘学编程

Java 设计模式 建造者模式

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