TS相关基本概念类型注解:TS中的类型注解是一种轻量级的方法,可以给函数或变量添加约束基本类型Boolean,number,string,array,tuple,enumeration,any,void,null,undefined,never,objectany,unknown,never,void定义any:任意类型的变量unknown:表示未知类型never:永远不存在的值的类型void:无类型,无类型unknown类似于any,但必须在Makeassertions或guards之前使用.从类型推导的角度来看,unknown是最高类型,any是unknown的较低级别,而void用于函数时,never表示函数用于执行不返回值的步骤(抛出异常ordying)loop)返回值类型,即不存在的值的类型,void表示没有返回值,不返回或返回undefined。从类型推导的角度来说,never是最低层,void和any可以在同一层使用。如果你不使用任何,你不需要声明它。如果不确定具体的类型,可以用unknown代替,使用的时候用typeassertion或者typeguard来收缩type。Never通常用于构造条件类型以组合更灵活的类型定义。void通常用来表示一个类型没有返回值。扩展任何和未知。在原始打字稿中,any属于top类型(最高级的类型)。在typescript3.0中,unknown只是是顶级类型你不能对未知类型做任何事情而不缩小类型functiongetDog(){return'22'}cosntdog:unknown=getDog()dog.hello()//Objectisoftype'unknown'sadvancedUsage接口(interface)可以描述一个对象或函数类(class)函数泛型枚举迭代器和生成器装饰器继承、多态、重载、重写抽象类&抽象方法具体用法示例可以参考官网TS编译原理图LR源码-->扫描器(scanner)-->令牌流(中间产品)-->解析器(parser)-->ASTAST-->校验器(checker)-->类型检查函数AST-->binder(绑定器)-->symbois(符号)-.-checker(检查器)-.-emitterAST-->emitter-->javascript代码实线是主进程,一共有三个,虚线是独立进程,符号单独指向checker,checker单独指向emitter。一般来说,graphLRsourceCode->Scanner-->tokenflow-->parser-->asttokenflow类似于ast,是扫描后代码转换的中间产物,也是一个对象,只是key和value不同,但整体构成相似类型推断图graphunknown-->anyany-->nullany-->number-.-neverany-->bigint-.-neverany-->boolean-.-neverany-->string-.-neverany-->object-->array-->tuple-.-neverobject-->function-.-neverany-->void-->undefined面试题从下面的代码推断出来的类型是什么tsleta=1024//numberletb='1024'//stringconstc='apple'//null,const类型被推断为nullletd=[true,false,true]//数组,准确的说是boolean[]lete={name:'apple'}//objectletf=null//nullassignability子集可以赋值给超集,超集不能赋值给子集除非有断言functiona(input:string):string{返回输入}函数b(输入:字符串|number){returninput}//a可以直接赋值给bletinput=a()b(input)//断言方法一:作为关键字letinput=b()a(inputasstring)//断言方法二:通过通用固定参数类型a(
