TypeScript培养类型思惟 前言:当你点开这篇文章时,我相信你已经在不少地方都已经据说过或者见过TypeScript了。 可是可能对TypeScript依然有不少问号:TypeScript究竟是什么?为何每一个人都在说TypeScript怎么怎么好,到底好在哪里?Angular、Vue3接连使用TypeScript进行了重构是否意味着咱们必须掌握TypeScript,它们又为何要选择TypeScript?我须要什么样的基础才能学会或者说学好TypeScript呢? 没有关系,在这个章节中咱们就来解答上面的疑惑,而且我但愿你们学完这个章节能够对一个概念有深刻的理解,就是类型思惟。 不着急,下面就让咱们和TypeScript有一场美丽的邂逅~前端
一. JavaScript的痛点 我始终坚信:任何新技术的出现都是为了解决以前某个技术的痛点。vue
1.1. 优秀的JavaScript JavaScript是一门优秀的编程语言吗? 每一个人可能观点并不彻底一致,可是从不少角度来看,JavaScript是一门很是优秀的编程语言。 并且,能够说在很长一段时间内这个语言不会被代替,而且会在更多的领域被你们普遍使用。 著名的Atwood定律: Stack Overflow的创立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律。 any application that can be written in JavaScript, will eventually be written in JavaScript. 任何可使用JavaScript来实现的应用都最终都会使用JavaScript实现。 其实咱们已经看到了,至少目前JavaScript在浏览器端依然无可替代,而且在服务端(Nodejs)也在备普遍的应用。 优秀的JavaScript没有缺点吗? 其实上因为各类历史因素,JavaScript语言自己存在不少的缺点; 好比ES5以及以前的使用的var关键字关于做用域的问题; 好比最初JavaScript设计的数组类型并非连续的内存空间; 好比直到今天JavaScript也没有加入类型检测这一机制; JavaScript正在慢慢变好 不能否认的是,JavaScript正在慢慢变得愈来愈好,不管是从底层设计仍是应用层面。 ES六、七、8等的推出,每次都会让这门语言更加现代、更加安全、更加方便。 可是知道今天,JavaScript在类型检测上依然是毫无进展(为何类型检测如此重要,我后面会聊到)。 1.2. 类型引起的问题 首先你须要知道,编程开发中咱们有一个共识:错误出现的越早越好 能在写代码的时候发现错误,就不要在代码编译时再发现(IDE的优点就是在代码编写过程当中帮助咱们发现错误)。 能在代码编译期间发现错误,就不要在代码运行期间再发现(类型检测就能够很好的帮助咱们作到这一点)。 能在开发阶段发现错误,就不要在测试期间发现错误,能在测试期间发现错误,就不要在上线后发现错误。 如今咱们想探究的就是如何在 代码编译期间 发现代码的错误: JavaScript能够作到吗?不能够,咱们来看下面这段常常可能出现的代码问题。webpack
function getLength(str) { return str.length; }程序员
console.log("1.正在的代码执行"); console.log("2.开始函数"); getLength("abc"); // 正确的调用 getLength(); // 错误的调用(IDE并不会报错)web
// 当上面的代码报错后, 后续全部的代码都没法继续正常执行了 console.log("3.调用结束"); 算法
在浏览器下的运行结果以下: 编程
GitHub说法:TypeScript is a superset of JavaScript that compiles to clean JavaScript output. TypeScript官网:TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. 翻译一下:TypeScript是拥有类型的JavaScript超集,它能够编译成普通、干净、完整的JavaScript代码。小程序
怎么理解上面的话呢? 咱们能够将TypeScript理解成增强版的JavaScript。 JavaScript所拥有的特性,TypeScript所有都是支持的,而且它紧随ECMAScript的标准,因此ES六、ES七、ES8等新语法标准,它都是支持的; 而且在语言层面上,不只仅增长了类型约束,并且包括一些语法的扩展,好比枚举类型(Enum)、元组类型(Tuple)等; TypeScript在实现新特性的同时,老是保持和ES标准的同步甚至是领先; 而且TypeScript最终会被编译成JavaScript代码,因此你并不须要担忧它的兼容性问题,在编译时也不须要借助于Babel这样的工具; 因此,咱们能够把TypeScript理解成一身神装的JavaScript,不只让JavaScript更加安全,并且给它带来了诸多好用的装备特效; 2.2. TypeScript的特色 官方对TypeScript有几段特色的描述,我以为很是到位(虽然有些官方,了解一下),咱们一块儿来分享一下: 始于JavaScript,归于JavaScript TypeScript从今天数以百万计的JavaScript开发者所熟悉的语法和语义开始。使用现有的JavaScript代码,包括流行的JavaScript库,并从JavaScript代码中调用TypeScript代码。 TypeScript能够编译出纯净、 简洁的JavaScript代码,而且能够运行在任何浏览器上、Node.js环境中和任何支持ECMAScript 3(或更高版本)的JavaScript引擎中。 TypeScript是一个强大的工具,用于构建大型项目 类型容许JavaScript开发者在开发JavaScript应用程序时使用高效的开发工具和经常使用操做好比静态检查和代码重构。 类型是可选的,类型推断让一些类型的注释使你的代码的静态验证有很大的不一样。类型让你定义软件组件之间的接口和洞察现有JavaScript库的行为。 拥有先进的 JavaScript TypeScript提供最新的和不断发展的JavaScript特性,包括那些来自2015年的ECMAScript和将来的提案中的特性,好比异步功能和Decorators,以帮助创建健壮的组件。 这些特性为高可信应用程序开发时是可用的,可是会被编译成简洁的ECMAScript3(或更新版本)的JavaScript。 正是由于有这些特性,TypeScript目前已经在不少地方被应用: 包括咱们前面提到的Vue3和Angular已经使用TypeScript进行重构; 数组
angular源码浏览器
包括Vue3之后的开发模式必然会和TypeScript更加切合,你们也更多的须要使用TypeScript来编写代码; 包括目前已经变成最流行的编辑器VSCode也是使用TypeScript来完成的
包括在React中已经使用的ant-design的UI库,也大量使用TypeScript来编写:
ant-design源码 包括小程序开发,也是支持TypeScript的
小程序开发 2.3. 体验TypeScript 原本想在这个位置放上一个体验TypeScript的程序,可是涉及到过多TypeScript的安装流程和vscode的配置信息。 因此,我打算在下一篇中专门讲解这部分的内容,包括使用webpack搭建一个能够自动测试TypeScript代码的环境。 So,稍安勿躁,这一个章节咱们就和TypeScript有一个简单的邂逅就好,后面再进行深刻了解。 三. 前端学不动系列 3.1. 前端开发者的难 在以前的Flutter文章中,我说到一个话题,大前端是一群最能或者说最须要折腾的开发者: 客户端开发者:从Android到iOS,或者从iOS到Android,到RN,甚至如今愈来愈多的客户端开发者接触前端相关知识(Vue、React、Angular、小程序); 前端开发者:从jQuery到AngularJS,到三大框架并行:Vue、React、Angular,还有小程序,甚至如今也要接触客户端开发(好比RN、Flutter); 目前又面临着不只仅学习ES的特性,还要学习TypeScript; Vue3立刻也会到来,又必须学习Vue3新特性; 大前端开发就是,不像服务器同样可能几年甚至几十年仍是那一套的东西。前端新技术会层出不穷。
看完文章,相信对于上面的问题,你内心应该已经有了答案,以后也会更新其余技术文章,如:TypeScript、React、Node、数据结构与算法等等,也会更新一些本身的学习心得等,欢迎你们添加微信:19950277730,获取更多干货分享及学习资源。