第九节 深入浅出TypeScripScript
一、为什么学习TS
01. TS vs JS
| TypeScript | JavaScript |
|---|---|
| JavaScript的超集,用于解决大型项目的代码复杂性 | 一种脚本语言,用于创建动态网页 |
| 强类型,支持静态和动态类型 | 动态弱类型语言 |
| 可以在变异期间发现并纠正错误 | 只能在运行时发现错误 |
| 不允许改变变量的数据类型 | 变量可以被复制成不同类型 |
TypeScript的范围比JavaScript要广,是JS的扩展。
02. TS带来了什么
- 类型安全
- 下一代JS特性
- 完善的工具链
二、TS基础
01. 基础类型
- boolean、number、string
- 枚举enum:成员和成员池之间可以进行映射和反映射;
- any、unkown、void
- never
- 数组类型[]
- 元组类型tuple
02. 函数类型
- 定义:TS定义函数类型时要定义输入参数类型和输出类型;
- 输入类型:参数支持可选参数和默认参数;
- 输出参数:输出可以自动判断,没有返回值时,默认为void类型;
- 函数重载:名称相同但参数不相同,可以通过重载支持多种类型;
03. interface
- 定义:接口类型是为了定义对象类型;
- 特点:
- 可选属性:?
- 只读属性:readonly
- 可以描述函数类型
- 可以买哦书自定义属性
- 总结:接口非常灵活 duck typing
04. 类
- 定义:写法和JS差不多,增加了一些定义;类的使用可以提升效率;
- 特点:
- 增加了public、private、protected修饰符;
- 抽象类:
- 只能被继承,不能被实例化;
- 作为基类,抽象方法必须被子类实现;
- interface约束类,使用implements关键字;
三、TS进阶
01. 高级类型
- 联合类型 '|'
- 交叉类型 '&'
- 类型断言:提前进行属性定义
- 类型别名(type VS interface):
- 定义:给类型起个别名;
- 相同点:
- 都可以兴义对象或函数;
- 都允许继承;
- 差异点:
- interface是TS用来定义对象,type是用来定义别名方便实用;
- type可以定义基本类型,interface不行;
- interface可以合并重复声明,type不行;
02. 范型
- 基本定义:
- 范型的与反思<>里面写类型参数,一般用T表示;
- 使用时有两种方法指定类型:
- 定义要使用的类型;
- 通过TS类型推断,自动推导类型;
- 范型的作用:临时占位,之后通过传来的类型进行推导;
- 基础操作符号:
- typeof:获取类型;
- keyof:获取所有键;
- in:便利枚举类型;
- T[k]:索引访问;
- extends:范型约束;
- 常用工具类型:
- Partial<T>:将类型属性变为可选;
- Required<T>:将类型属性变为必选;
- Readonly<T>:将类型属性变为只读;
- Pick、Record……
四、TS实战
- 声明文件
-
declare:三方库需要类型生声明文件;
-
d.ts:声明文件定义;
-
@types:三方库TS类型包;
-
tsconfig.json:定义TS的配置;
五、TypeScript补充
01. TS优势
- 是对Javascript的扩展,解决了JS的主要问题:弱类型和没有命名空间,难以模块化;
- TS可以在任何浏览器、任何计算机、任何操作系统上使用,且是开源的;
- TS引入了JS没有的类的概念;
- TS引入了模块的概念,可以将声明、数据、函数和类封装在类中;
- TS使重构变的快捷和容易;
02. 泛型
- 泛型是静态类型语言的基本特征,允许开发人员将类型作为参数传递给另一种类型、函数或其他结构;
- 使用泛型可以提升代码的灵活性,使组件可重用并消除重复;
- TypeScript 完全支持泛型,以此将类型安全性引入到接受参数和返回值的组件中。