[ TypeScript 入门| 青训营笔记]

79 阅读4分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第二天

课程内容

Typescript 学习背景介绍

TypeScript 是 JavaScript 的语法超集,它添加了静态类型,近几年的发展中,也受到诸多开发者的喜爱。Typescript 的社区逐渐壮大,日趋完善,为越来越多前端开发者提供服务

为什么是Typescript

JS

  • 动态类型
  • 弱类型语言

TS

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

Typescript 基础语法讲解

1. Typescript 类型

1.1 基础数据类型

左边为JS代码,右边为TP代码

1.2 对象类型

> 一般情况下,在自定义的TS中的编写约定中会带有一个I开头表示这是一个类型,用于和普通的类和对象进行区分
> any是TS中特有的类型

1.3 函数类型

1.4 函数重载

1.5 数组类型

数组就是一种特殊的对象

2. 泛型

泛型:不预先指定确定的类型的时候使用,在使用时候根据传入的内容再确定和使用的一个类型 泛型的几种表示:

常用语法: 泛型约束:在泛型的声明之后使用extends类型表示的是一个类型的约束 泛型默认类型:在泛型的声明后通过等号的方式指定默认的类型

3. 类型别名 & 类型断言

类型别名:使用其他的名字或者变量来承载一个更复杂的类型 类型断言:对变量之后通过as实现类型断言

4.字符串/数字 字面量

1674102678336.png

Typescript 高级类型讲解

通过各种基础数据类型快速做高级类型的定义,然后自动衍生出非常多的类型。 从一个日常编码的case入手学习

1. 联合类型 & 交叉类型

若存在一个书本列表,有两种类型的书籍,不同的书籍是通过Type进行区分,比如说历史书有一个时间范围,小说有一个主题:

存在的问题:

  • type指定是string,但是不适合于这个场景中,因为该场景只有两种type,如果这样编码会存在一定的隐患;
  • 两种类型的书籍的作者都是string进行表示,存在交叠可以对代码进行简化
  • 联合类型: IA | IB: 联合类型表示一个值可以是几种类型之一
  • 交叉类型: IA & IB: 多种类型叠加到一起成为一种类型,它包含了所需的所有类型的特性

2. 类型守卫 & 类型保护

该段代码在JS中是可以成功运行的,但是在TS中因为类型保护机制会出现报错,所以还需要进行改进

这样定义一个函数并且还需要返回一个类型谓词可能会比较麻烦,但其实TS是非常智能的,所以还可以进行优化

3 子集类型

假设参数的入参一定是正确的: 这就会有一定的局限性

Record<string, any>是一个高级表达第一个泛型表示了key的类型,第二个泛型表示value的类型 所有的高级类型都可以从基础的数据类型得到表达和衍生

4 函数返回值类型

  • 函数的返回值通过泛型进行表达。
  • 定义了一个IDelayCall的类型别名,该类型是一个function类型,该类型必须是一个泛型,所以需要对泛型及逆行类型限定为函数
  • 此处的extends表示的不再是泛型限制,而是类型推断

Typescript 工程应用介绍

浏览器Web

  1. 配置webapack loader相关配置
  2. 配置tsconfg.js文件
  3. 运行webpack启动 /打包
  4. loader处理ts文件时,会进行编译与类型检查

NodeJs

使用TSC进行编译 image.png

  1. 安装Node与npm
  2. 配置tsconfig.js文件
  3. 使用npm安装tsc
  4. 使用tsc运行编译得到js文件