流程学习笔记
我在看ts代码的时候,发现很多ts代码似乎是通过减少js代码上的类型注释而做出来的,(这只是一个ts初学者的理解),这对于js玩家来说非常友好。 兼容js代码。
2. TypeScript 和 javascript 的区别
TypeScript 是 JavaScript 对象的扩展。
JavaScript 代码无需任何更改即可与 TypeScript 一起使用,并且编译器可以使用
TypeScript 代码转换为 JavaScript。
TypeScript 通过类型注释提供编译时静态类型检查。
TypeScript 中的数据需要显式类型,而 JavaScript 不需要。
TypeScript 为函数提供默认参数值。
TypeScript 引入了 JavaScript 中不存在的 **“类”概念**。
TypeScript 引入了模块的概念,可以将声明、数据、函数和类封装在模块中。
3.TypeScript的优点
静态输入
静态类型是一种在开发人员编写脚本时检查错误的功能。 查找并修复错误对于当今的开发团队来说势在必行。 借助此功能,将允许开发人员编写更强大的代码并对其进行维护,从而促进更好的代码质量和清晰度。
大型开发项目
有时,为了改进开发项目,需要对代码库进行小的增量更改。 这些微小的变化可能会产生严重的、意想不到的后果,因此需要撤消这些变化。 使用 TypeScript 工具进行构建更改既简单又快速。
更好的合作
开发小项目的时候,开发人员会很多,这时候出现乱码和错误的机会就会减少。 类型安全是一种在编码过程中检查错误的功能,而不是在编译项目时检查错误。 这为开发团队创建了更高效的编码和调试过程。
更高的生产力
干净的 ECMAScript 6 代码、自动完成和动态类型等激励措施有助于提高开发人员的工作效率。 这些功能还可以帮助编译器创建优化的代码。
4.TypeScript 特性
类型注释和编译时类型检查:在编译时注释变量类型
类型推断:ts中没有注解变量类型会手动推断变量的类型
类型擦除:编译期间注释的内容和套接字在运行时被工具擦除
接口:ts使用socket来定义对象类型
枚举:用于数值限制在一定范围内的场景
Mixin:可以接受任何类型的值
通用编程:
名称空间:名称仅在本区域有效,其他区域可以复用该名称,不会发生冲突。
元组:元组组合了不同类型的对象,相当于一个可以保存不同类型数据的字段。
等待:
2. TypeScript 基础知识 1. 安装
npm install -g typescript
ts的文件后缀通常是.ts
在 TypeScript 中编写 React 时,文件扩展名为 .tsx
编译:
tsc hello.ts//hello.ts是文件名
2.Hello world ts实例
function sayHello(person: string) { return "Hello, " + person;}let user = "Tom";console.log(sayHello(user));
在前面的代码中:string是我们为person指定的变量类型。 其他句型与js相同。
3. 原始数据类型
原始数据类型包括:boolean、numeric、string、null、undefined以及ES6中的新类型Symbol和ES10中的新类型BigInt
前几个比较简单,我就不细说了,我就写一下BigInt
Bigint 任意精度整数
在javaScript中,number可以精确表达的最大数字是2^53,没有比这个更大的数字了,
Number可以表示的最大安全范围是正负2^53 - 1。也就是说,Number.MAX_SAFE_INTEGER和Number.MIN_SAFE_INTEGER.BigInt类型的出现可以解决这个问题。 大于2^53的数字可以用BigInt类型表示
4.任意值(任意)
任何 任何值类型
与名称一样,any 值是不确定类型的值。
任何类型,允许形式参数化为任何类型
我的理解是 ts 变量被定义为任何类型。 回到解放前一夜之间,就和js一样了。
变量的类型由作为形式参数提供给它的数据确定。
mix类型:可以接受任何类型的值
注意:如果ts中没有指定变量,则默认为任意类型
5. 类型推断
类型推断简单理解就是在ts的句型中,如果一个变量没有定义类型,就会被手动进行类型推断
如果变量没有形参,则会按类型推导为任意类型
注意:如果定义时没有形参,那么以后无论有没有形参,都会被推断为任意类型,根本不会被类型检测到:
6. 联合类型
使用类型检测时可以使用多种数据类型,也就是说一个变量可以定义多种数据类型
例如:
let pc: string | number;pc = one ;pc = 1 ;
在前面的例子中,变量pc同时被定义为字符串和数字,也就是所谓的联合类型。
联合类型中的数据类型以 | 分隔
当ts不确定变量是联合类型中的类型时,它只能访问联合类型所有类型共有的属性或方法:
例如在前面的例子中
如果我们不确定 pc=1 或 pc=1
使用length属性会报错,因为length属性不是数字的方式
使用字符串方法不会报错,因为两者都有字符串技巧。
7. 接口
接口只是用来描述对象的类型
数据的类型有数字空字符串等数据格式typescript 解析xml,对象的类型通过socket来描述。
这里借用阮一峰老师的例子:
interface Person { name: string; age: number;}let tom: Person = { name: "Tom", age: 25};
在本例中,Person 是我们定义的一个套接字。 定义了两个变量name和age
这样就比较容易理解了,当person套接字中同时包含name和age属性时,直接调用person,而不是分别调用各个属性。
这里有几点需要注意:
1、定义的变量属性个数要和socket的一致,不能多也不能少
2.接口中可以使用任意属性来定义socket
name: string; age?: number; [propName: string]: any;}let tom: Person = { name: "Tom", gender: "male"};
在上面的代码中:
使用 [propName: string] 定义任何属性以获取字符串类型的值。
3.可以在接口中使用readonly定义只读属性
readonly id: number;
请注意,只读约束是在第一次给出对象参数时存在typescript 解析xml,而不是第一次给出只读属性参数时存在
8. 数组
ts中有多种定义数组的方式
1.输入+方括号”表示链表:
let fibonacci: number[] = [1, 1, 2, 3, 5];
2、使用链表子类(Array Generic)Array来表示链表:
let fibonacci: Array<number> = [1, 1, 2, 3, 5];
3、接口也可以用来描述链表:
nterface NumberArray { [index: number]: number;}let fibonacci: NumberArray = [1, 1, 2, 3, 5];
4、使用any表示链表中允许任意类型:
let list: any[] = ["xcatliu", 25, { website: "http://xcatliu.com" }];
9. 功能
ts中的函数实际上是在js函数的基础上减少类型检测
我们看一下ts的一个函数定义
function sum(x: number, y: number): number { return x + y;}
在此代码中,给定 xy 总和
分别减少类型检测,没有其他变化。
注意:TS => 中的箭头函数与 ES6 中的箭头函数不同。意思是指向
左边是输入类型,需要用括号括起来,右边是输出类型。
ts的函数参数必须和定义一致,不能多也不能少
本节参考资料:
函数类型
10. 类型确定
类型断言(Type Assertion)可以用来自动指定一个值的类型。
简单来说,后面我们使用any类型后,group值就明确了它是什么类型
主要有两种语法:
值 as 类型 如果是在react中使用 必须使用这个<类型>值
使用:
1. 将关节类型确定为其中一种类型
2.确定一个父类为更具体的泛型类型
3.确定any类型为any
类型断言
这部分内容比较多,我会单独写一篇文章