这是我参与「第五届青训营 」伴学笔记创作活动的第 7 天✌
课堂笔记
本堂课重点内容:
- TypeScript 历史及定义解析
- TypeScript 优势解读
- TypeScript 练习工具
详细知识点介绍
1.为什么是TypeScript
首先来看看JavaScript和TypeScript的区别
JavaScript: 动态类型:在执行阶段才能确认类型匹配。
类似的还有Java、python、C++、#C。
TypeScript:
静态类型:在编译期间或执行前就能确认类型匹配,编写代码时需要定义变量的类型。
共同点: 都是弱语言,一个变量可以赋予不同数据类型的值,会进行隐式的类型转换。
特点:
Typescript特点:
静态类型
- 可读性增强:基于语法解析TSDoc,ide增强。
- 可维护性增强:在编译阶段暴露大部分错误。(多人合作的大型项目中,获得更好的稳定性和开发效率)
JS的超集
- 包含于兼容所有JS特性,支持共存。
- 支持渐进式引入与升级。
2.基本语法
1.基础数据类型
等于
其中:
- boolean(布尔类型):表示逻辑值:true和false。
- number(数字类型):双精度64位浮点值。它可以用来表示整数和分数,除了支持十进制和十六进制字面量,TypeScript还支持ECMAScript 2015中引入的二进制和八进制字面量。
- string(字符串类型):使用双引号(
")或单引号(')表示字符串。使用模版字符串,它可以定义多行文本和内嵌表达式,以反引号包围(`),并且以${ expr }这种形式嵌入表达式。 - 数组类型:第一种:可以在元素类型后面接上
[],表示由此类型元素组成的一个数组;第二种,使用数组泛型,在元素类型后面接上Array<元素类型>。 - void类型:无类型,只能赋予undefined和null。
2.对象数据类型
接口(interface): 在面向对象的编程中,接口是一种规范的定义,它定义了行为和动作的规范。在程序设计中,接口起到一种限制和规范的作用。
命名规范
- 接口名前加上大写I前缀
- 接口名一般首字母大写
属性
- readonly:只读属性,约束属性不可在对象初始化外赋值(在对象的属性前加该关键字)。
- [key:类型]:任意属性,约束所有对象属性都必须是该属性的子类型。
- ?:可选属性,定义该属性可以不存在(即可缺省)。
举例
1.定义类型及对象
分析:
3.函数类型
TS中有两种常见的类型声明的方式
在JS中函数的常见用法:
TS中:
- 函数声明:直接在函数上进行类型的补充。
- 函数表达式:给函数变量赋值一个函数的类型声明。
两者都是针对入参和出参而言。
4.函数重载:
定义:
具备不同参数的同名函数。
特点:
- 名称相同
- 参数不同(包括参数类型、个数不同)
组成:
- 函数声明
- 函数体
目的就是第一个参数是
date时,返回Date对象;是string的话,则返回时间戳字符串。
5.数据类型:
6.TypeScript补充类型:
- null:表示对象缺失,无赋值。
- undefined:初始化变量一直未定义的值;
- any(任意类型):声明未any的变量可以赋予任意类型的值,但是
Object类型的变量只可赋任意值 ,而不能在它上面调用任意的方法。 - enum(枚举类型):用于定义数值集合,支持枚举值到枚举名的正、反向映射。
- generics(泛型):指在定义函数、接口或类的时候,不预先指定具体的类型,而在使用的时候再指定类型的一种特性。
实例
泛型:
①泛型函数
T为泛型:可理解为被定义的一个未知类型的变量
taeget:变量T的类型
②泛型接口、泛型类
③泛型约束、泛型参数默认类型
泛型约束:使用了 extends 约束了泛型 T 必须为string类型。
泛型参数默认类型:当使用泛型时没有在代码中直接指定类型参数,从实际值参数中也无法推测出时,这个默认类型就会起作用。
④类型别名、类型断言
类型断言相当于其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。
课后个人总结
容易混淆的点:JS和TS概念上的区别 难点:泛型的理解与应用