这是我参与「第五届青训营 」伴学笔记创作活动的第 4 天,今天林皇老师给我们详细介绍了TypeScript的基础知识,区别JavaScript和TypeScript并且介绍了它的高级类型,两个视频干货满满,使我收获颇多,下面是今天讲课的一些课堂笔记: TyptScript: 基本语法: 1.基础数据类型:相较于JavaScript,TypeScript在定义变量时用冒号引出了变量的类型; 2.对象类型: 定义:一般用大写I开头表示这是一个对象,用关键字interface进行定义,后加{}来进行基础数据类型定义,通过readonly定义只读属性,该对象不可在初始化外赋值。 hobby?:string;可选属性:定义该属性可以不存在; [key:string]:any;任意属性:约束所有对象属性都必须是该属性的子类型 [key:string]:any(key的属性类型不确定) 3.函数类型 (1)对函数的声明:对入参和出参进行类型声明,直接在参数后加“:+参数类型” (2)interface+函数名来定义类型 4.函数重载 function getDate(type:'string'):string interface IGetDate{(type:'string'):string; (type:'date'):Date; (type:'string'|'date'):Date|string;} 5.数组类型 1.【类型+方括号】表示 type IArr1=number[]; const arr1:IArr1=[1,2,3,4,5,6]; 2.泛型表示 type IArr2=Array<string|number|Record<string,number>>; const arr2:IArr2=[1,2,'3','4',{a,1}]; 3.元祖表示 type IArr3=[number,number,string,string]; const arr3:IArr3=[1,2,'3','4']; 4.接口表示 interface IArr4{[key:number]:any;} const arr4:IArr4=['string',()=>null,{},[]]; 6.TypeScript补充类型 (1)空类型,表示无赋值 type IEmptyFunction=()=>void; (2)任意类型,是所有类型的子类型 type IAnyType=any; (3)枚举类型:支持枚举值到枚举名的正、反方向映射 enum EnumExample{add='+',mult='*'} EnumExample['add']==='+'; EnumExample['+']==='add'; 4.泛型 type INumArr=Array; 不预先指定具体的类型,而在使用的时候再指定类型的一种特性 函数:type IGetRepeatArr=(target:T)=>T[]; 泛型接口&多泛型: interface IX<T,U>{key:T;val:U} 泛型类:class IMan{instance:T} 泛型别名: type ITypeArr=Array;
1.泛型约束 type IGetRepeatStringArr==(target:T)=>T[];(限制泛型必须符合字符串) 2.泛型参数默认类型 type IGetRepeatArr<T=number>=(target:T)=>T[];(当输入参数没有声明类型时默认应为number 类型) 用as来确认类型断言
高级类型
1.联合/交叉类型
类型声明繁琐,存在较多重复时:联合类型:1A|1B;联合类型表示一个值可以是几种类型之一
交叉类型:1A&1B;多种类型叠加到一起成为一种类型,它包含了多需的所有类型的特性
2.类型保护:访问联合类型时,处于程序安全,仅能访问联合类型中的交集部分
类型守卫:定义一个函数,它的返回值是一个类型谓词,生效范围为子作用域(当两个类型没有任何重合点时,才需要定义类型守卫)
1.关键字keyof,其相当于取值对象中的所有key组成的字符串字面量
type Ikey=keyof{a:string;b:number}=>type Ikey="a"|"b"
2.关键字in,其相当于取值字符串字面量中的一种可能(a或b),配合泛型P,即表示每个key
3.关键字?,通过设定对象可选选项,即可自动推导出子集类型
函数返回值类型
关键字【extends】跟随泛型出现时,表示类型推断,其表达可类比三元表达式,如T===判断类型?类型A:类型B
关键字【infer】出现在类型推荐中,表示定义类型变量,可以用于指代类型,如该场景下,将函数的返回值类型作为变量,使用新泛型R表示,使用在类型命中的结果
type IReturnType<T extends(...args:any)=>any>=T extends(...args:any)=>infer R?R:any