TypeScript 入门 | 青训营笔记

70 阅读3分钟

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

课堂笔记

本堂课重点内容

  • TypeScript学习背景介绍
  • TypeScript基础语法与高级类型
  • TypeScript工程应用

具体内容

TypeScript 主要使用的工具

TypeScript 是 JavaScript 的语法超集,它添加了静态类型,近几年的发展中,也受到诸多开发者的喜爱。
TypeScript 与 JavaScript 的主要区别是一个是静态类型,一个是动态类型。基于此它的优势有:

  1. 可读性增强:基于语法解析TSDoc,ide增强
  2. 可维护性增强:在编译阶段暴露大部分错误

所以可以在多人合作的大项目中,获得更好的稳定性和开发效率。
TypeScript的功能特点是JS的超集,包含于兼容所有JS特性,支持共存,支持渐进式引入与升级。
基本语法:

[基础数据类型]:
用一个变量去定义类型的时候,就在变量名后加上冒号:再接上它类型的名称

image.png

[对象类型]:
创建一个bytedancer的对象,像基础数据类型一样用冒号紧跟一个类型来添加类型声明。这些类型基本上是内置的类型,大部分情况下是我们自定义的。在TS中我们一般一般用大写I开头表示这是一个类型,通过关键字interface来定义。 image.png 在对象中,我们经常可能会有一些特定的需要,eg:只读属性,可选属性,任意属性等。

[函数类型]:
给函数添加类型声明一般有两种方式:

  1. 直接在函数上进行一个类型的补充
  2. 给函数变量赋值一个类型声明

对于一个函数来说,它最重要的点其实是它的入参和出参,所有类型声明也是针对这个来补充的。
参数类型就在参数的冒号后,返回值的类型则在右括号冒号后:

image.png

这样的代码其实相当长,有时候对我们的代码不是很友好,所以,函数也支持利用interface来定义类型的。 image.png

[函数重载]:

image.png

[数组类型]: 数组其实是一个对象的扩展索引

image.png

TypeScript 高级数据类型

[联合/交叉类型]:
场景:存在一个书籍列表,有两种类型,不同类型是通过type进行区分。对其进行一个类型声明: image.png 如上图,利用interface关键字定义后的代码比原先的代码还要多,存在较多的重复。
这样其实对代码存在一些隐患,改进方式:

  • 联合类型:IA | IB;联合类型表示一个值可以是击中类型之一
  • 交叉类型:IA & IB;多种类型叠加在一起成为一种类型,它包含了所需的所有类型的特性。

image.png

[类型保护与类型守卫]:
log函数中可以接收IA或者IB两种类型的参数,判断参数是a类型还是b类型: image.png 这样在js中没问题,但是在ts中会报错。在ts中可以通过类型守卫的方式来进行改造: image.png

[Merge 函数类型实现]: 将sourceObj与targetObj做合并。

image.png

[函数返回值类型]:
场景:函数delayCall接收一个函数作为入参,其实现延迟1s运行函数,返回promise,结果为入参函数的返回结果。如何为delayCall实现类型声明。

image.png

用泛型,并对泛型做限定: image.png