*TypeScript变量声明TypeScript变量的命名规则:变量名可以包含数字和字母。除了下划线_和美元$符号外,不允许使用其他特殊字符,包括空格。变量名不能以数字开头。变量在使用前必须声明,我们可以使用var来声明变量。我们可以使用以下四种方式来声明变量:1.声明变量的类型和初值:var[变量名]:[类型]=value;例如:varuname:string="Runoob";2.声明变量的类型,但没有初始值,变量值将被设置为undefined:var[变量名]:[类型];var[变量名]=值;示例:varuname="Runoob";4。声明一个变量,不设置类型和初始值,类型可以是任意类型,默认初始值为undefined:var[变量名];例子:varuname;例子如下:varuname:string="Runoob";varscore1:number=50;varscore2:number=42.50varsum=score1+score2console.log("name:"+uname)console.log("第一科目成绩:"+score1)console.log("第二科目成绩:"+score2)console.log("总成绩:"+sum)1.基础JavaScript分为两种:原始数据类型(原始数据类型)和引用数据类型(对象类型)。基本数据类型包括:Boolean、Number、String、Null、Undefined,以及ES6中的新类型Symbol和ES10中的新类型BigInt。引用数据类型为Object,如:Function、Array、Date等都属于Object。而TypeScript还有其他类型如元组类型(tuple)、枚举类型(enum)、任意类型(any)、void类型、never类型。1.基本数据类型:⑴BooleanBoolean:letisDone:boolean=false;请注意,使用构造函数Boolean创建的对象不是Boolean:letcreatedByNewBool??ean:boolean=newBoolean(1);//Type'Boolean'isnotassignabletotype'boolean'.//'boolean'是原始类型,但'Boolean'是一个包装器对象。尽可能使用“布尔值”。事实上newBoolean()返回一个布尔对象:letcreatedByNewBool??ean:Boolean=newBoolean(1);直接调用boolean也可以返回boolean类型:letcreatedByBoolean:boolean=Boolean(1);在TypeScript中,boolean是JavaScript中的基本类型,Boolean是JavaScript中的构造函数。其他基本类型(null和undefined除外)相同,这里不再赘述。⑵取值Number:设decLiteral:number=6;lethexLiteral:number=0xf00d;//ES6中的二进制表示法letbinaryLiteral:number=0b1010;//ES6中的八进制表示法letoctaLiteral:number=0o744;letnotANumber:number=NaN;letinfinityNumber:number=Infinity;其中0b1010和0o744是ES6中的二进制和八进制表示,将被编译为十进制数。⑶StringString:letmyName:string='Tom';letmyAge:number=25;//模板字符串letsentence:string=`你好,我叫${myName}。下个月我就满${myAge+1}岁了。`;(4)空值void:functionalertName():void{alert('MynameisTom');}声明一个void类型的变量是没有用的,因为只能赋给undefined和null(只有当--strictNullChecks未指定):letunusable:void=undefined;(5)Null和Undefined:令u:undefined=undefined;让n:null=null;与void的区别在于undefined和null都是子类型的所有类型。也就是说,undefined类型的变量可以赋值给number类型的变量://这样不会报错letnum:number=undefined;//这样不会报错letu:undefined;letnum:number=你;而voidnumber类型的变量不能赋值给number类型的变量:letu:void;letnum:number=u;//类型'void'不能分配给类型'number'。任意值Any:如果是普通类型,在赋值时不允许改变类型:letmyFavoriteNumber:string='seven';myFavoriteNumber=7;//index.ts(2,1):errorTS2322:类型'number'不能分配给类型'string'。但是如果它是任何类型,则允许分配任何类型。让myFavoriteNumber:any='seven';我的最爱号码=7;允许访问任何值的任何属性:letanyThing:any='hello';console.log(anyThing.myName);console.log(anyThing.myName.firstName);也允许调用任何方法:可以认为,声明一个变量为任意值后,对其进行任意操作,返回内容的类型为任意值。如果一个变量在声明时没有指定它的类型,它将被识别为任何值类型:letsomething;letsomething:any;something='seven';相当于something='seven';something=7;something=7;something.setName('Tom');something.setName('Tom');⑺Tuple元组:数组组合相同类型的对象,而元组组合不同类型的对象。让汤姆:[字符串,数字]=['汤姆',25];当赋值或访问一个已知索引的元素时,你会得到正确的类型,或者你只能赋值其中之一:lettom:[string,number];tom[0]='Tom';tom[1]=25;tom[0].slice(1);tom[1].toFixed(2);让tom:[string,number];tom[0]='Tom';但是直接初始化或赋值元组类型的变量时,需要提供元组类型中指定的所有项。lettom:[string,number];tom=['Tom',25];//truelettom:[string,number];tom=['Tom'];/error//类型中缺少属性'1''[string]'但在类型'[string,number]'中是必需的。不能给它添加非初始化值:lettom:[string,number];tom=['Tom',25];tom.push('male');tom.push(true);//参数“true”类型的参数不可分配给“string|”类型的参数数字'。⑻枚举Enum:enumDays{Sun,Mon,Tue,Wed,Thu,Fri,Sat};枚举成员会被分配一个从0递增的数字,枚举值会反向映射到枚举名称:enumDays{Sun,Mon,Tue,Wed,Thu,Fri,Sat};console.log(Days["Sun"]===0);//trueconsole.log(Days["Mon"]===1);//trueconsole.log(Days["Tue"]===2);//trueconsole.log(Days["Sat"]===6);//trueconsole.log(Days[0]==="Sun");//trueconsole.log(Days[1]==="Mon");//trueconsole.log(Days[2]==="Tue");//trueconsole.log(Days[6]==="Sat");//true//事实上,上面的例子会被编译为:varDays;(function(Days){Days[Days["Sun"]=0]="太阳";天[天[“星期一”]=1]=“星期一”;天[天["星期二"]=2]="星期二";天[天[“星期三”]=3]=“星期三”;天[天["星期四"]=4]="星期四";天[天["周五"]=5]="周五";天[天["星期六"]=6]="星期六";})(天||(天={}));枚举类型手动赋值:enumDays{Sun=7,Mon=1,Tue,Wed,Thu,Fri,Sat};控制台.log(天数[“太阳”]===7);//trueconsole.log(Days["Mon"]===1);//trueconsole.log(Days["Tue"]===2);//trueconsole.log(Days["Sat"]===6);//true//手动分配的枚举项可能不是数字,使用类型断言enumDays{Sun=7,Mon,Tue,Wed,Thu,Fri,Sat=
