●上一章我们讲了TS的编译和初步使用●现在开始正式进入TS基本类型的学习之旅●给我们最基本的数据类型做一些限制Boolean类型letboo:boolean=false●boo变量当前的数据类型仅限于boolean类型●以后给这个变量赋值后,只要不是boolean类型,都会提示typeerrorvaluetype●number类型在ts中存储为浮点数。同时也支持十六进制、八进制、二进制等十六进制表示letnum:number=6num=0xf00dnum=0b1010num=0o744●num变量仅限于number类型,只要你将number类型的数据赋值给num,没有问题,其他的不行Stringclassletstr:string='千峰前端'限制str变量为string的多种基本数据类型●我们也可以用(|)为一个设置多种数据类型变量letfoo:string|boolean='千峰大前端'●这个foo变量仅限于string或者boolean类型的数据,可以接受这两种数据类型数组类型定义方法1constlist:number[]=[]●定义了一个list变量,而限于一个数组,这个数组只能接受数字数据定义方法2letlist:Array=[100,200]这个方法是泛型定义的,后面会详细解释●中定义的数组这种方式也可以包含多种数据类型的const列表:Array=[100,200]表示数组可以添加数字或字符串数??据元组类型基本定义●元组(Tuple):是TS中给出的概念。实际上,它是一个具有已知数量的元素和数据类型的数组。元组是TS的一个概念。JS中没有元素。JS中数组的概念是无限长的,你可以添加任意多的数据。TStuples,经过编译,在JS中其实就是数组,所以实际上并没有限制长度。在TS中,元组只是一种形式已知元素个数和数据类型的数组,并不代表长度超过限制就会报错。它仅通过元组。建议您指定数组的长度和类型。毕竟TS只是在开发的时候对JS中的各种数据进行类型限制。constlist:[number,string]=[100,'hello']将list限制为一个元组○元组建议两个数据○[0]位置数据是数字类型数据○[1]位置数据是一个字符串类型数据。初始化时,必须直接赋值。必须注意一个问题,就是元组的取值顺序不能改为可选值。我们可以用问号(?)来判断某个值是可选的Itemconstlist:[number?,string?]=[]●此时对数字和字符串数据做一个可选的限制●索引对应的位置可以有值也可以没有○但是一定要注意,顺序不能改哦元组越界●刚才说了,元组其实本质上就是数组○数组其实是没有长度限制的○所以元组只是建议你不要超过长度,其实超过也没关系●所以超过限制长度的数据,还有不会有太多限制○你写的所有数据类型都可以是constlist:[number,string]=[100,'hello']list.push(100)list.push(200)list.push('hello')list.push('world')主要是初始化的时候不给越界数据,后面再往数组里面添加数据●并且额外添加的数据可以是number或者string类型●并且没有顺序限制●但是其他数据类型还是不能是Any类型●有时候,我们无法确定某个数据的类型,因为数据源可能来自m用户输入,或者一些第三方库所以我们一开始没办法限制它的数据类型●但是从TS的角度来说,每个数据类型都必须限制一次●因此,给定一个Any(任意类型)让foo:any=100foo=truefoo='hello'foo变量可以接受任何数据类型,也就是说没有限制●但是对于认真的程序员来说,不建议经常使用any,因为在这种情况下,TS的意义不是空类型void●是一种类型,与任何类型正好相反,没有任何意义●我们可以将变量设置为void类型,但没有人会这样做因为没有任何意义letfoo:void=undefined●当你将foo设置为void类型时,这个变量只能接受undefined和null类型的数据●其他的都不能接受●void的另一个地方用在了返回值中thefunction○当这个函数没有返回值时,你看到的类型限制会是voidfunctionand(a,b):void{console.log(a+b)}●当然,我们也可以推断出这个结果●AlsoThat也就是说,当你把一个函数的返回值设置为void,那么这个函数就不能写Never的返回值了。这种类型代表了永远不存在的值类型,用在比较少的地方。一般如果用Never来描述一个函数的返回值,那么这个函数就不能有任何返回,也就是说这个函数一定不能正常结束,所以我们需要在这个函数中让函数代码报错,即是,手动抛出异常,或者让函数永不结束两者都想要void,它们在TS中用处不大。分别对应undefined和null,一般不用letu:undefined=undefinedletn:null=null但是undefined和null可以作为任何类型的子类型出现●即你设置其他类型,也可以填undefined或nullletn:number●此时n被限制为number类型,但是n的当前值是undefined,所以没有问题●因为undefined可以是number的subtype对象类型●这是一个特殊的类型限制,不仅表示对象数据类型●表示除非基本数据类型以外的所有类型●即除了数字,s字符串、布尔值、符号、空值或未定义以外的类型letfoo:object=100foo=[]