1、初识TypeScript
1.1、主要的目标
1、TypeScript
核心语法 2、TypeScript
+Vue3
3、Ts+React18
在早期Vue2如果想要使用TypeScript
是非常麻烦的、但是Vue3中就好很多了、但是即使是这样、也没有React跟TypeScipt
更加方便
1.2、为什么要学习TypeScript
从编程的思维的角度来说、他会提高你类型的思维方式、对后端程序员来说非常友好
因为有类型限制的这一特性加入、编写大型项目时容错度会更好一些、写出来的代码类型也是非常安全的Vue3的项目、都是通过TypeScirpt
来重写的
功利角度来说!升职加薪…
1.3、JavaScript
&TypeScript
的取舍
任何新技术的出现都是为了解决原有技术的某个痛点、当然TypeScript的出现就是为了补足JavaScriprt
的、而不是抛弃JavaScript
每个人可能观点并不完全一致,但是从很多角度来看,JavaScript是一门非常优秀的编程语言;而且,可以说在很长一段时间内这个语言不会被代替,并且会在更多的领域被大家广泛使用;
TypeScript
的使用就是通过环境把TypeScript
代码变成JavaScript
然后在浏览器上进行运行
1.3.1、著名的Atwood定律
Stack Overflow的创立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律
any application that can be written in JavaScript, will eventually be written in JavaScript.
任何可以使用JavaScript来实现的应用都最终都会使用JavaScript实现。
1.3.2、JavaScript开发多端应用
Web端的开发我们一直都是使用JavaScript
移动端开发可以借助于ReactNative
、Weex
、Uniapp
等框架实现跨平台开发;
小程序端的开发也是离不开JavaScript
;
桌面端应用程序我们可以借助于Electron
来开发;
服务器端开发可以借助于Node环境使用JavaScript
来开发
1.4、JavaScript
的缺失
并且随着近几年前端领域的快速发展,让JavaScript迅速被普及和受广大开发者的喜爱,借助于JavaScript本身的强大,也让使用JavaScript开发的人员越来越多。
其实由于各种历史的因素、JavaScript语言本身存在很多的问题、
①比如ES5以及之前使用Var关键字关于作用域的问题、
②在比如最初JavaScript
设计的数组类型并不是连续的内存空间、
③最大的一个缺失就是直到今天JavaScipt
也没有解决的问题类型检测机制
不可否认的是,JavaScript正在慢慢变得越来越好,无论是从底层设计还是应用层面。在ES6、7、8等的推出,每次都会让这门语言更加现代、更加安全、更加方便。但是知道今天,JavaScript在类型检测上依然是毫无进展(为什么类型检测如此重要,我后面会聊到)
1.5、JavaScript
类型缺失带来的问题
首先你需要知道,编程开发中我们有一个共识:错误出现的越早越好、写的时候发现错误、就不要再编译时候发现(IDE的优势,在编码的过程中就可以帮助我们发现错误)、能在代码编译期间发现错误、就不要再运行期间发生错误、类型检测就可以很好的帮助我们做到这一点
能在开发阶段发现错误,就不要在测试期间发现错误,能在测试期间发现错误,就不要在上线后发现错误。
//any 任意类型
function getLength1(args:any){ //
return args.length;
}
//限制类型参数只能传入String或者String[]
function getLength1(args:String|String[]){
return args.length;
}
//限制对象类型当中的属性
function getLength1(args:{length:number}){
return args.length;
}
const info={length:100}
//传入String调用
getLength1("aa")
//传入数组调用
getLength1(["abc","cba","nac"]);
//传入数组调用
getLength(123)
//传入空字符串调用
getLength()
//传入一个对象
getLength2(info);
类型缺失这一错误、很大的原因就是因为JavaScript没有对我们传入的参数进行任何的限制,只能等到运行期间才发现这个错误,并且当这个错误产生时,会影响
后续代码的继续执行,也就是整个项目都因为一个小小的错误而深入崩溃;
当然你可能会想,我怎么可能犯这么低级的错误呢?
当我们写像我们上面这样的简单的demo时,这样的错误很容易避免,并且当出现错误时,也很容易检查出来;但是当我们开发一个大型项目时呢?你能保证自己一定不会出现这样的问题吗?而且如果我们是调用别人的类库,又如何知道让我们传入的到底是什么样的参数呢?如果我们通过TypeScript给代码加上了类型限制那么在开发大型项目时、TypeScript这一类型检测特性、就会大大的增强我们代码的可用性和安全性、很多问题在编译器就能被发现
1.6、JavaScript
类型缺失思维
我们已经简单体会到没有类型检查带来的一些问题,JavaScript因为从设计之初就没有考虑类型的约束问题,所以造成了前端开发人员关于类型思维的缺失
前端开发人员通常不关心变量或者参数是什么类型的,如果在必须确定类型时,我们往往需要使用各种判断验证;
从其他方向转到前端的人员,也会因为没有类型约束,而总是担心自己的代码不安全,不够健壮,
所以我们经常会说JavaScript不适合开发大型项目,因为当项目一旦庞大起来,这种宽松的类型约束会带来非常多的安全隐患,多人员开发它们之间也没有良好的类型契约,比如当我们去实现一个核心类库时,如果没有类型约束,那么需要对别人传入的参数进行各种验证来保证我们代码的健壮性,在比如我们去调用别人的函数,对方没有对函数进行任何的注释,我们只能去看里面的逻辑来理解这个函数需要传入什么参数,返回值是什么类型;
1.7、JavaScript
怎么添加类型约束
为了弥补JavaScript类型约束上的缺陷,增加类型约束,很多公司推出了自己的方案:
2014年,Facebook推出了flow来对JavaScript进行类型检查.
同年,Microsoft微软也推出了TypeScript1.0版本.
他们都致力于为JavaScript提供类型检查.
而现在,无疑TypeScript已经完全胜出:
Vue2.x的时候采用的就是flow来做类型检查
Vue3.x已经全线转向TypeScript,98.3%使用TypeScript进行了重构
而Angular在很早期就使用TypeScript进行了项目重构并且需要使用TypeScript来进行开发
而甚至Facebook公司一些自己的产品也在使用TypeScript
学习TypeScript不仅仅可以为我们的代码增加类型约束,而且可以培养我们前端程序员具备类型思维。
如果之后想要学习其他语言,比如Java、Dart等也会是驾轻就熟;
1.7、TypeSript
的定义
虽然我们已经知道TypeScript是干什么的,也知道它解决了什么样的问题,但是我们还是需要全面的来认识一下TypeScript到底是什么?
在GitHub和TypeScript官网的说法为、TypeScript
是拥有类型的JavaScript
超集,她可以编译成普通的、干净的、完整的JavaScript
代码
其实我们完全可以将TypeScript
理解成为加强版的JavaScript
,JavaScript所拥有的特性,TypeScript全部都是支持的,并且它紧随ECMAScript的标准,ES6、
ES7、ES8等新语法标准,它都是支持的;
TypeScript在实现新特性的同时,总是保持和ES标准的同步甚至是领先;
并且在语言层面上,不仅仅增加了类型约束,而且包括一些语法的扩展,比如==枚举类型(Enum
)、元组类型(Tuple
)等;
并且TypeScript最终会被编译成JavaScript代码,所以你并不需要担心它的兼容性问题,在编译时也可以不借助于Babel这样的工具;
所以,我们可以把TypeScript理解成更加强大的JavaScript,不仅让JavaScript更加安全,而且给它带来了诸多好用的好用特性。
1.8、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;
1.9、什么框架采取了TypeScript
?
Angular源码在很早就使用TypeScript来进行了重写,并且开发Angular也需要掌握TypeScript;
Vue3源码也采用了TypeScript进行重写,在阅读源码时你会看到大量TypeScript的语法;
包括目前已经变成最流行的编辑器VSCode
也是使用TypeScript来完成的;
包括在React中已经使用的ant-design的UI库,也大量使用TypeScript来编写;
目前公司非常流行Vue3+TypeScript、React+TypeScript的开发模式;
包括小程序开发,也是支持TypeScript的。