TypeScript入门|青训营笔记

66 阅读4分钟

这是我参加[第五届青训营]伴学笔记创作活动的第4天

本堂课堂知识

  • 了解通过发展历史和语言优势需要学习TS的原因
  • 了解TS基本语法
  • 了解通过高级类型的方式,将普通类型的解决方案进行高级化

TypeScript发展历史

image.png 由图可知,三个主流前端框架都有了对应的TypeScript的版本

TypeScript语言优势

比较点JavaScriptTypeScript
语言类型弱类型语言弱类型语言
编译在执行的时机动态:将脚本粘贴在控制台后回车即可执行报错直接显示,执行/编译阶段进行类型匹配/检验静态:编译前进行类型匹配,编译完后在可执行场景执行,如java,python
语言类型弱类型语言弱类型语言

tips:弱类型语言-可以类型转换,比如1+“1”可以计算,但在强类型语言中就会类型不匹配报错

TypeScript的特征

  1. 静态类型
  • 可读性增强:基于语法解析TSDoc,ide增强
  • 可维护性增强:在编译阶段暴露大部分错误(语法拼写,类型匹配等错误)
    =>多人合作的大型项目中,获得更好的稳定性和开发效率
  1. JS的超集
  • 包含于兼容所有JS特性,支持共存
  • 支持渐进式引入与升级

编辑器推荐:VS Code、TS官网在线编译器

TypeScript的基本语法

从JS代码到认识TS的代码来比较两者的差异

基础数据类型

基础数据类型是相同的,只不过TS在变量后新增":变量类型" image.png

对象类型

对象类型通常都是自定义,约定习惯是对象类型都带有一个大写的i来表示 image.png

函数类型

类型声明的方式

1.直接在函数上进行类型补充(图最下)

function 函数名(变量1:变量类型,变量2:变量类型):返回值类型{ 
   return 函数操作;
} 

2.给函数变量赋值一个函数类型声明(图最下)

const 函数名:(变量1:变量类型,变量2:变量类型)=>返回值类型 =(变量1,变量2) => 函数操作; 

3.有时候以上写法会过于冗长,则可以采取以下interface的写法:(图右上)

interface I对象名 {
  (变量1:变量类型,变量2:变量类型):返回值类型;
}
const 对象名:对象函数 = (变量1,变量2) => 函数操作;

image.png

函数重载案例

函数签名(重载签名)= 函数名称+函数参数+函数参数类型+返回值类型
eg.function funa(value: number, type: string): string image.png 解决方案:
IGetDate范围表达大于getDate2匿名函数范围表达(调大范围?)
把interface中第三行的timestamp类型改为any即可通过,别人是成功的,但我自己试的时候仍然报错,代码截图如下,今天初步学习ts还不太熟悉没调试出来,如果今后学完解决了放评论,也欢迎大家一起交流 image.png

数组类型

前三种定义属于简化写法,实际开发中第1和2种比较常用 image.png

其他补充类型

image.png

泛型

使用时才能确定类型,定义一个位置变量类型T image.png 其他场景应用: image.png

  • 设置泛型约束-通过extents关键字将泛型限定在string字符串
  • 设置泛型参数默认类型-通过“=”作用的方法,以及用泛型别名方式定义 image.png

类型别名&类型断言

type关键字=>类型别名
as关键字和keyBy函数实现=>类型断言 image.png

字符串/数字 字面量

通过“|”或关系的符号相隔,多个择其一 image.png

高级类型

联合/交叉类型

案例1:不同属性的书籍列表 image.png 修改后

  • 联合类型:IA|IB;表示一个值可以是几种类型之一
  • 交叉类型:IA&IB;多个类型叠加到一起成为一个类型,包含了所需所有类型的特征 image.png

类型保护与类型守卫

案例2:类型守卫 image.png 修改后: 自定义的类型守卫 image.png

Merge 函数类型实现

案例3 image.png

image.png 修改后:因为不确定来源Obj的类型通过泛型实现 image.png

函数返回值类型

案例4 image.png 泛型推断 image.png 训练方式:查看类库

TypeScript 工程应用

主要是浏览器Web和NodeJs上的应用

web端-webpack

每步的目的: 1.webpack不能识别的文件转化成webpack可识别的文件,主要处理ts文件转化成js文件进行处理 2.约束项目的行为,可通过官网查看具体项进行配置 image.png

nodejs端-tsc作为引擎编译

tsc需要手动运行,但可以通过vscode中设置监控模式 image.png