目录
一、TS简介
- TypeScript 由微软开发,是基于 JavaScript 的一个扩展语言。
- TypeScript 包含了 JavaScript 的所有内容,即:Typescript 是 Javascript 的超集。
- TypeScript 增加了:静态类型检查、接口、泛型等很多现代开发特性,因此更适合大型项目的开发。
- TypeScript 需要编译为 JavaScript,然后交给浏览器或其他 JavaScript 运行环境执行。
二、为什么需要TS
1、今非昔比的 JavaScript(了解)
JavaScript 当年诞生时的定位是浏览器脚本语言而且代码量很少。用于在网页中嵌入一些简单的逻辑随着时间的推移,JavaScript 变得越来越流行,如今的 JavaScript 已经可以全栈编程了。
现如今的 JavaScript 应用场景比当年丰富的多代码量也比当年大很多,随便一个JavaScript 项目的代码量,可以轻松的达到几万行,甚至十几万行!然而 JavaScript 当年“出生简陋”,没考虑到如今的应用场景和代码量,逐渐的就出现了很多困扰。
2、JavaScript 中的困扰
- 不清不楚的数据类型
- 有漏洞的逻辑
- 访问不存在的属性
- 低级的拼写错误
…
3、在TS中不用运行就有提示
-
不清不楚的数据类型
-
有漏洞的逻辑
-
访问不存在的属性
-
低级的拼写错误
…
4、静态类型检查
在代码运行前进行检查,发现代码的错误或不合理之处,减小运行时异常的出现的几率,此种检查叫『静态类型检查』,TypeScript 和核心就是『静态类型检查』,简言之就是把运行时的错误前置。
同样的功能,TypeScript 的代码量要大于JavaScript,但由于 TypeScript 的代码结构更加清晰,在后期代码的维护中 TypeScript 却远胜于JavaScript。
三、TS编译
浏览器不能直接运行 TypeScript 代码,需要编译为 JavaScript 再交由浏览器解析器执行。
- 命令行编译
- 自动化编译
- tsconfig.json配置文件
四、类型声明
五、类型推断
六、类型总览
1、JS中数据类型
2、TS中数据类型
3、注意点
七、常用类型与语法
1、any
2、unknown
3、never
4、void
3. 区别
5、object
①声明对象类型
②声明函数类型
③声明数组类型
6、tuple(元组)
7、enum(枚举)
①数字枚举
②字符串枚举
③常量枚举
8、type (自定义类型)
①基本用法
②联合类型
③交叉类型
9、一种特殊情况
10、复习类相关知识
11、属性修饰符
①public修饰符
②属性的简写形式
③protected修饰符
④private修饰符
⑤readonly修饰符
12、抽象类
13、interface(接口)
①定义类结构
②定义对象结构
③定义函数结构
④接口之间的继承
⑤接口自动合并(可重复定义)
14、一些相似概念的区别
①interface和type的区别
②interface和抽象类的区别
八、泛型
九、类型声明文件
拓展:
十、TS装饰器
1、简介
2、类装饰器
①. 基本语法
类装饰器是一个应用在类声明上的函数,可以为类添加额外的功能,或添加额外的逻辑。
②. 应用举例
需求:定义一个装饰器,实现 Person 实例调用 tostring 时返回 JS0N.stringify 的执行结果。
③. 关于返回值
④. 关于构造类型
在 TypeScript 中, Function 类型所表示的范围十分广泛,包括:普通函数、箭头函数、方法等等。但并非 Function 类型的函数都可以被 new 关键字实例化,例如箭头函数是不能被实例化的,那么TypeScript 中概如何声明一个构造类型呢?有以下两种方式:
- 仅声明构造类型
- 声明构造类型+指定静态属性
⑤. 替换被装饰的类
对于高级一些的装饰器,不仅仅是覆盖一个原型上的方法,还要有更多功能,例如添加新的方法和状态。需求:设计一个 LogTime 装饰器,可以给实例添加一个属性,用于记录实例对象的创建时间,再添加一个方法用于读取创建时间。
3、装饰器工厂
装饰器工厂是一个返回装饰器函数的函数,可以为装饰器添加参数,可以更灵活地控制装饰器的行为。
需求:定义一个 LogInfo 类装饰器工厂,实现 Person 实例可以调用到 introduce 方法,且 introduce中输出内容的次数,由 LogInfo 接收的参数决定。
4、装饰器组合
装饰器可以组合使用,执行顺序为:先【由上到下】的执行所有的装饰器工厂,依次获取到装饰器,然后再【由下到上】执行所有的装饰器
5、属性装饰器
①基本语法
②关于属性遮蔽
如下代码中:当构造器中的 this.age = age 试图在实例上赋值时,实际上是调用了原型上 age 属性的 set 方法。
③应用举例
需求:定义一个 state 属性装饰器,来监视属性的修改。
6、方法装饰器
①基本语法
②应用举例
需求:
1.定义一个 Logger 方法装饰器,用于在方法执行前和执行后,均追加一些额外逻辑。
2.定义一个 Validate 方法装饰器,用于验证数据。
7、访问器装饰器
①基本语法
②应用距离
需求:对 weather 类的 temp 属性的 set 访问器进行限制,设置的最低温度-58 ,最高温度 58