一、TypeScript简介
- TypeScript由微软开发,是基于javaScript的一个扩展语言。
- TypeScript包含了JavaScript的所有内容,即:TypeScript是JavaScript的超集,
- TypeScript增加了:静态类型检查、接口、泛型等很多现代开发特性,因此更适合大型项目的开发。
- TypeScript需要编译为JavaScript,然后交给浏览器或其他JavaScript运行环境执行。
一、TypeScript出现原因
1. js存在以下问题:js不会报错,不利于项目维护
- 不清不楚的数据类型
- 有漏洞的逻辑
- 访问不存在的属性
- 低级拼写错误
2.ts支持静态类型检查
在代码运行前进行检查,发现代码的错误或不合理之处,减小运行时异常的出现的几率
3.TypeScript的代码结构更加清晰,便于维护
三、TS编译
从html文件引入编译后的js文件
- 全局安装ts
js
npm install -g typescript
- 初始化
js
tsc init
3.tsc --watch 监听ts文件
js
tsc --watch xx.ts
四、TS数据类型
1. js数据类型
- 基本类型 :string、number、boolean、null、undefined、symbol;
- 引用/对象类型:String、Number、Boolean、Array、Function、Date、Error、Math、RegExp、Global、Object
2. TS新增类型
2.1 any:任意类型。
any类型可以赋值给任意类型变量,对定义类型变量产生破坏
2.2 unknown:未知类型
(1) 可以理解为类型安全的any,适用于:不确定数据的具体类型
(2)解决unknown报错方法(typeOf、断言)

2.3 never:任何值都不是,不能有任何值,几乎用不到
(1) 几乎不用never去直接定义变量,没有意义
(2) never一般是TS主动推断出的

(3) never可用于限制函数的类型(函数永远也执行不完或者直接抛出异常的情况返回nerver)

2.4 void:通常用于函数返回值声明【函数不返回任何值/返回值为空,调用者也不应依赖其返回值做任何操作】
注意:不能接受void定义的函数返回值做操作,即使函数隐式返回undefined
2.5 object(object和Object):实际应用很少,范围太宽
(1) object (2) Object(除了null和undefined 都可以存)
(3) 声明对象类型
1)字面量类型声明(" ?"为可选属性) 2)索引签名:允许定义对象可以具有
任意数据量的属性
,这些属性的键和类型是可变的,常用于描述类型不确定的属性,(具有动态属性的对象)
(4) 声明函数类型

go
```js
注意:
1.TS 中的=>在函数类型声明时表示函数类型,描述其参数类型和返回类型
2.JS 中的=>是一种定义函数的语法,是具体函数的实现
3.函数类型声明还可以使用接口,自定义类型等方式
```
(4) 声明数组类型
2.6 tuple元组
元组是一种特殊的数组类型
,可以存固定数量
的元素,并且每个元素的类型是已知
的且可以不同
。元组用于精确描述一组数值的类型,?表示可选元素

2.7 enum枚举(重点)
作用:增加代码可读性,便于后期维护
(1) 数字枚举
数字枚举一种最常见的枚举类型,其成员的值自动递增
且数字枚举还具备反向映射
的特点,在下面 代码的打印中,不难发现:可以通过值来获取对应的枚举成员名称。

不给初始值,默认值从0开始自动递增,否则从当前值递增 (2) 字符串枚举
会丢失反向映射特点
(3) 常量枚举
会减少编译后生成的js代码量,提高运行时的性能
- 使用常量枚举,编译后js文件只生成我们需要的js代码
- 不使用常量枚举,编译后会生成一些额外的js代码
3.两个自定义类型方式
3.1 type(重点)
type可以为任意类型创建别名,让代码更简洁,可读性更强,同时能更方便的进行类型复用和扩展
(1) 基础用法

(2) 联合类型(或类型 " | ")
联合类型是一种高级类型,值可以是类型中的一种
(3)交叉类型(且类型 " & ")
允许多个类型合并为一个类型,合并后会拥有类型所有成员,常用于对象类型 (4)特殊情况
在函数定义时,限制函数返回值为void,那么函数得返回值必须是空

使用类型声明限制函数返回值为void时,ts并不会严格要求函数返回空
原因:是为了确保如下代码成立,我们知道Array,prototype.push的返回一个数字,而Array.prototy pe,forEach方法期望其回调的返回类型是void