前端圈流行一句话:
「任何能用 JavaScript 实现的应用,最终都会用 JavaScript 实现」。
从这句话可以看出,前端工程师的野心有多么大。
从移动终端到后端服务,从 IoT 到神经网络,JavaScript 几乎无处不在。
如此广阔的应用领域,自然对语言的安全性、健壮性和可维护性有更高的要求。
尽管 ES 标准在近几年有了长足的进步,但在类型检查方面依然无所建树。
大家可能常常会遇到这样到场景:
1、调用一个别人写的函数,很不幸,这个家伙没有留下任何注释,为了搞清楚参数类型,你只能硬着头皮去看里面的逻辑。
2、领导看好你,让你维护一个重要的底层类库,你殚精竭虑,优化了一个参数类型,但不知道有多少处引用,在提交代码前,是否感到脊背发凉?
3、明明定义好了接口,可一联调就报错了——「TypeError: Cannot read property 'length' of undefined」,于是你怒气冲冲地去找后端理论:
「嘿,哥们儿!
这个字段是数组!
这个字段是数组!
这个字段是数组!
」
归根结底,是因为 JavaScript 是一门动态弱类型语言, 对变量的类型非常宽容,而且不会在这些变量和它们的调用者之间建立结构化的契约。
如果你长期在没有类型约束的环境下开发,就会造成「类型思维」的缺失,养成不良的编程习惯,这也是做前端开发的可能短板之一,要警惕。
在技术领域,但凡有丁点不好用的地方,必然有新的英雄出现。
今天的主角 TypeScript 于 2012 年 10 月 1 日发布,六年多过去了,TypeScript 已经形成了丰富的生态,很好地弥补了 JavaScript 在静态类型检查方面的缺陷。
TypeScript 是一种由微软开发的自由和开源的编程语言。
它是 JavaScript 的一个严格超集,并添加了可选的静态类型和使用看起来像基于类的面向对象编程语法操作 Prototype。
目前,两大前端框架 Angular 和 Vue 已经开始全面使用 TypeScript 进行代码重构,在可预见的未来,TypeScript 将成为前端开发者必须掌握的开发语言之一。
2017 年,Slack 这样的技术公司就从 JavaScript 切换至 TypeScript,并获得了巨大的收益。
那么, TypeScript 究竟有哪些特性使得它获得了前端工程师的喜爱呢?
第一,类型检查。
TypeScript 会在编译代码时进行严格的静态类型检查,这意味着你可以在编码阶段发现可能存在的隐患,而不必把它们带到线上。
第二,语言扩展。
TypeScript 会包括来自 ES 6 和未来提案中的特性,比如异步操作和装饰器;
也会从其他语言借鉴某些特性,比如接口和抽象类。
第三,工具属性。
TypeScript 能够编译成标准的 JavaScript,可以在任何浏览器、操作系统上运行,无需任何运行时的额外开销。
从这个角度上讲,TypeScript 更像是一个工具,而不是一门独立的语言。
除此之外,TypeScript 还可以帮助团队重塑「类型思维」,接口提供方将被迫去思考 API 的边界,他们将从代码的编写者蜕变为代码的设计者。