TypeScript入门(上)| 青训营笔记

106 阅读2分钟

TypeScript入门

这是我参与「第四届青训营 」笔记创作活动的第3天

为什么选择ts

image.png

动态类型

在执行阶段才确定类型的匹配。

静态类型

像pytohon和java都是静态类型语言,他们都需要编译过后才能执行代码,

所以动态和静态的区别就是:是否需要经过编译后才执行

为什么选择ts

image.png

ts语法-基础数据类型

image.png

对象类型

image.png 一般都会以大写开头代表其为类型(以图中IBytedancer为例,其为一个类型)

注意

  1. ts类型规则较为严格,如图中的变量jobId,其类型为只读readonlyhobby为可选属性,写法为hobby?: ...(具体的类型)

  2. 任意属性[key: string]: any,任意属性应该说该类型可以继续添加不在IBytedancer中定义的类型,比如没有在IBytedancer中定义age,但是定义了任意属性,我们就可以在bytedancer中定义age这个属性,需要注意的是,key:string仅仅是定义了key的类型而不是属性的类型,如果要选择具体定义什么数据类型的属性,那么将后面的any改成具体的数据类型即可

  3. IBytedancer中定义的属性除了可选属性和任意属性,其他属性都是必填项。

函数类型

image.png 注意参数列表,主要是里面定义数据类型的方式,

函数特性:重载

image.png 但是图示写法相对复杂,可读性个人认为也是较差的,所以提供了下图的方法更为简洁一些:

image.png 图示代码的意思就是在IGetDate中定义了数据类型,注意,(): string;这里,就是图示IGetDate定义的第一条数据类型,这里的意思是该函数的返回值匹配的是string类型,然后括号中的就是形参的数据类型,可以参考倒数第二张图的代码,会更清晰一些,

数组类型

image.png 写个更直观点的:const arr1: number[] = [1 ,2 ,3],意思是定义了一个number类型的数组,

注意图中的type类型只是一个别名,我们可以理解为声明了一个变量名,里面包含了数据类型即可

元祖表示的数组是真牛哇,虽然其他的语言也可以emmm

泛型

ts中的泛型就是不预先指定具体的类型,而是在使用中再指定具体的类型的一种特性,使用的范围包括:函数、接口、类。。。等

泛型约束

比如我们要限制泛型必须符合字符串:<T extends string

泛型参数默认类型

<T = number>

ts语法-高级类型

联合/交叉类型

image.png

image.png

类型保护与类型守卫

image.png 上图所示代码在js运行没问题,但是ts报错,所以我们需要类型守卫

image.png