TypeScript入门
这是我参与「第四届青训营 」笔记创作活动的第3天
为什么选择ts
动态类型
在执行阶段才确定类型的匹配。
静态类型
像pytohon和java都是静态类型语言,他们都需要编译过后才能执行代码,
所以动态和静态的区别就是:是否需要经过编译后才执行
为什么选择ts
ts语法-基础数据类型
对象类型
一般都会以大写开头代表其为类型(以图中
IBytedancer为例,其为一个类型)
注意
-
ts类型规则较为严格,如图中的变量
jobId,其类型为只读readonly,hobby为可选属性,写法为hobby?: ...(具体的类型), -
任意属性
[key: string]: any,任意属性应该说该类型可以继续添加不在IBytedancer中定义的类型,比如没有在IBytedancer中定义age,但是定义了任意属性,我们就可以在bytedancer中定义age这个属性,需要注意的是,key:string仅仅是定义了key的类型而不是属性的类型,如果要选择具体定义什么数据类型的属性,那么将后面的any改成具体的数据类型即可 -
在
IBytedancer中定义的属性除了可选属性和任意属性,其他属性都是必填项。
函数类型
注意参数列表,主要是里面定义数据类型的方式,
函数特性:重载
但是图示写法相对复杂,可读性个人认为也是较差的,所以提供了下图的方法更为简洁一些:
图示代码的意思就是在
IGetDate中定义了数据类型,注意,(): string;这里,就是图示IGetDate定义的第一条数据类型,这里的意思是该函数的返回值匹配的是string类型,然后括号中的就是形参的数据类型,可以参考倒数第二张图的代码,会更清晰一些,
数组类型
写个更直观点的:
const arr1: number[] = [1 ,2 ,3],意思是定义了一个number类型的数组,
注意图中的type类型只是一个别名,我们可以理解为声明了一个变量名,里面包含了数据类型即可
元祖表示的数组是真牛哇,虽然其他的语言也可以emmm
泛型
ts中的泛型就是不预先指定具体的类型,而是在使用中再指定具体的类型的一种特性,使用的范围包括:函数、接口、类。。。等
泛型约束
比如我们要限制泛型必须符合字符串:<T extends string
泛型参数默认类型
<T = number>
ts语法-高级类型
联合/交叉类型
类型保护与类型守卫
上图所示代码在js运行没问题,但是ts报错,所以我们需要类型守卫