写点什么

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

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

关注

评论

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

加密解密之 crypto-js 知识

浩浩子

2021春招JAVA面试总结:Java+并发+Spring+MySQL+分布式+Redis+算法+JVM等

Java 编程 程序员 架构 面试

Mac下brew更新及安装Prometheus+Grafana

程序员架构进阶

容器 Prometheus 监控系统 28天写作 3月日更

如何学习数据结构与算法

C语言与CPP编程

c c++ 数据结构 程序人生 算法

Java 并发基础(一):synchronized 锁同步

看山

Java Java并发 并发编程

如何学习数据结构与算法

C语言与CPP编程

数据结构 算法

使用Flask Nginx Gunicorn和Supervisor部署一个简单的Restful API接口服务器

Langer

Python 部署与维护 服务器部署 web服务

数据分析作业-用户分析-ReadHub

隋泽

产品经理训练营

浅析 Fabric Peer 节点

Rayjun

一文搞懂如何实现 Go 超时控制

万俊峰Kevin

微服务 超时 Go 语言

位运算符在 JS 中的妙用

浩浩子

shell学习

我是程序员小贱

3月日更

Img、net & page新展望:连接感知

云小梦

JavaScript html 网络 用户体验 连接感知

HTML5+CSS3高级动画的应用实践

云小梦

JavaScript html css3 浏览器API 网页动画

SpringBoot + Mybatis + Druid + PageHelper在多数据源下如何配置并实现分页

北游学Java

Java mybatis spring Boot Starter

ONE MORE

吴小平

散列(哈希)表算法学习

Nick

数据结构 算法 哈希算法

尤雨溪 Twitch 直播:下一代前端构建工具 ViteJS —— Open Source Friday

清秋

翻译 大前端 vite webpack 构建工具

智能时代的TCL之舞

脑极体

我对PageRank 算法的理解

跳蚤

Logstash 中 Ruby filter 使用指南

Langer

ruby Logstash ELK

推荐引擎概述

跳蚤

浅析Node中间件Koa&Express:原理和实现

云小梦

JavaScript node.js 中间件 koa

Redis 作为缓存是如何工作的

escray

redis 学习 极客时间 3月日更 Redis 核心技术与实战

力扣(LeetCode)刷题,简单+中等题(第26期)

不脱发的程序猿

面试 LeetCode 28天写作 算法面经 3月日更

架构师训练营 4 期 第13周

引花眠

架构师训练营 4 期

第八章作业

LouisN

使用 Typescript 的一些注意事项

浩浩子

用栈、回溯算法设计迷宫程序

不脱发的程序猿

回溯算法 28天写作 3月日更 迷宫程序

用户体验 | 页面阅读进度提示

云小梦

html css3 用户体验 页面进度提示

React 中后台系统多页签实现

清秋

Vue 大前端 React keepalive

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