这是我参与「第五届青训营 」伴学笔记创作活动的第 6 天
TypeScript课程笔记
一、重点内容
- TypeScript 历史及定义解析
- TypeScript 优势解读
- TypeScript 练习工具
- 联合交叉类型
- 类型保护与类型守卫
- Merge 函数类型实现
- 函数返回值类型
- TypeScript 工程应用
二、详细知识点
1、动态类型和静态类型
- 动态类型语言
执行时才会编译(检验匹配),例如PHP
- 静态类型语言
提前做,先编译再执行。检验匹配,例如:C、JAVA
2、弱类型语言和强类型语言
- 弱类型语言
类型转换。例如数字和字符串可以相加,隐式类型转换
- 强类型语言
强制类型定义。例如数字和字符串不可以相加,报错
3、TypeScript 优势:
(1)静态类型
-
可读性增强:基于语法解析TsDoc,ide增强
语法解析,自动帮助生成文档。写的类型会说明含义,写这个类型就相当于写了文档
ide类型提示,语法补全
-
可维护性增强:在编译阶段暴露大部分错误
语法拼写错误、类型匹配错误
-
多人合作的大型项目中,获得更好的稳定性和开发效率
(2)JS的超集
- 包含于兼容所有JS特性,支持共存
- 支持渐进式引入与升级
4、TypeScript基础类型
number、string、boolean、null、undefined、symbol、bigInt。
5、自定义类型
约定大写I开头是类型
6、一些属性类型
-
readonly只读属性
只读属性:约束属性不可在对象初始化外赋值
-
?可选属性
可选属性:定义该属性可以不存在
-
any任意属性 任意属性:约束所有对象属性都必须是该属性的子类型
-
如果一个对象的key是变量,方括号
7、为函数添加类型声明,两种方式
(1)直接在函数上进行类型补充
函数参数类型,括号里面x: number
返回值类型,函数右小括号后面加冒号和返回值类型
(2)给函数变量赋值一个函数类型声明
定义函数类型,函数类型赋给变量
函数返回类型标识用箭头=>
8、函数重载
容易出错,注意定义类型范围要更大
9、数组类型
(1)「类型+方括号」表示
type IArr1 = number[];
(2)泛型表示
type IArr2 = Array<string | number Record<string,number>>;
(3)元祖表示
IArr3 = [number,number,string,string];
(4)接口表示
interface IArr4 { [key: number] : any; }
(5)赋值
const arr1: IArr1 = [1,2,3,4,5,6];
const arr2: IArr2 = [1,2,'3', '4', { a: 1 }];
const arr3: IArr3 = [1,2, '3','4'];
const arr4: IArr4 = ['string',() => null,{},[]];
10、Typescript补充类型
(1)空类型,表示无赋值
type IEmptyFunction = () => void;
(2)任意类型,是所有类型的子类型
type IAnyType = any;
(3)枚举类型:支持枚举值到枚举名的正反映射
enum ECorlor { Mon,Tue,wed,Thu,Fri,Sat,Sun };
ECorlor ['Mon'] === 0;
ECorlor[0] == 'Mon'
(4)泛型
type INumArr = Array<number>;
11、泛型
泛型:不预先指定具体的类型,而在使用的时候再指定类型的一种特性
type IGetRepeatArrR = <T>(target: T) => T[];
12、高级类型
Partial, Readonly, Record, Pick, Required, Exclude, Extract, Omit, NonNullable, Parameters [1]
条件类型、映射类型、类型推断、never 类型
13、其他重点内容
- 联合交叉类型
- 类型保护与类型守卫
- Merge 函数类型实现
- 函数返回值类型
13、推荐使用的Typescript编辑器
- awesome
- babel
- Node
三、个人总结
- 类型往往只需要一处声明,其它地方都是自动推断的。
- 对于 Typescript 来说,类型完备很重要,也就是说,Typescript 对框架和工具的要求是很高的。
- Typescript 支持类型最大的好处是可读性。类型可以给开发者更多的信息,是最有价值的文档。
四、引用参考
[1] TypeScript 的所有高级类型