深入浅出TypeScript
为什么要学习TS
ts带来了类型安全,下一代JS特性,完善的工具链,提高了生产力
TS基础
基础类型
- boolean: 代表布尔类型的值,只能为 true 或 false。
- number: 代表数字类型的值,包括整数和浮点数。
- string: 代表字符串类型的值,使用单引号或双引号括起来的字符序列。
- enum: 枚举类型,用于定义一组具名的常量,可以通过枚举成员的名称来引用对应的值。
- any: 代表任意类型,可以为任何类型的值。
- unknown: 类似于 any 类型,但是更加安全。当你不确定一个值的类型时,可以将它赋值为 unknown,必须进行类型检查或类型断言后才能使用。
- void: 代表没有返回值的函数的返回类型。
- never: 代表永远不会返回的函数的返回类型,或者表示抛出异常或进入无法结束的循环。
- 数组类型: 可以使用类型加上中括号 [] 来表示一个数组,例如
number[]表示数字类型的数组。 - 元组类型: 元组用于表示一个固定长度的数组,每个元素可以有不同的类型。例如,
[number, string]表示包含一个数字和一个字符串的元组。
函数类型
定义:TS定义函数类型时要定义输入参数类型和输出类型
输入参数:参数支持可选参数和默认参数
输出参数:输出可以自动推断,没有返回值时,默认为void类型
函数重载:名称相同但参数不同,可以通过重载支持多种类型
接口
定义:接口是为了定义对象类型
特点:
可选属性:?
只读属性:readonly
可以描述函数类型
可以描述自定义属性
总结:接口非常灵活
类
定义:写法和JS差不多,增加了一些定义
特点:
增加了public、private、protected修饰符
抽象类:
只能被继承,不能被实例化
作为基类,抽象方法必须被子类实现
interface约束类,使用implements关键字
TS进阶
高级类型
1.联合类型 |
使用 | 符号表示,可以将多个类型组合到一起,表示变量可以是多种类型之一。例如,number | string 表示一个变量可以是数字或字符串类型。
2.交叉类型 &
使用 & 符号表示,可以将多个类型合并到一起,表示变量需要同时具备多种类型的特性。例如,A & B 表示一个变量同时具有类型 A 和类型 B 的特性。
3.类型断言
类型断言(Type Assertion): 类型断言用于手动指定变量的类型,通过将变量断言为特定类型,可以获得更精确的类型检查。有两种形式:尖括号语法 <类型>值 和 as 语法 值 as 类型。例如,let x: any = 'Hello'; let strLength: number = (x as string).length; 在这个例子中,我们通过类型断言将变量 x 断言为字符串类型,然后获取它的长度。
4.类型别名(type VS interface)
定义:给类型起个别名
相同点:
1.都可以定义对象或函数
2.都允许继承
差异点:
1.interface是TS用来定义对象,type是用来定义别名方便使用;
2.type可以定义基本类型,interface不行
3.interface可以合并重复声明,type不行
泛型
定义
软件工程中,我们不仅要创建一致定义良好的API,同时也要考虑可重用性。组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。
基本使用
基本定义:
1.泛型的语法是<>里面写类型参数,一般用T表示
2.使用时有两种方法指定类型:
-1.定义要使用的类型
-2.通过TS类型推断,自动推导类型
3.泛型的作用是临时占位,之后通过传来的类型进行推导
基础操作符
typeof:获取类型
keyof:获取所有键
in:遍历枚举类型
T[k]:索引访问
extends:泛型约束
常用工具类型
Partial:<T>:将类型属性变为可选
Required<T>:将类型属性变为必选
Readonly<T>:将类型属性变为只读
Pick、Record...
TS实战
声明文件
declare:三方库需要类型声明文件
.d.ts:声明文件定义
@types:三方库TS类型包
tsconfig.json:定义TS的配置
个人感受
TypeScript 是 JavaScript 的超集,它为我们提供了更加强大的类型系统和静态类型检查,使我们能够在开发过程中更早地发现潜在的错误和问题。提供了丰富的类型系统,强大的工具支持等实用的功能,总的来说,学习 TypeScript 对于提升代码质量、增强可读性和可维护性至关重要。它为 JavaScript 开发提供了更严格的类型检查和更强大的工具支持,使得开发者能够更自信地编写高质量的代码。