上文我们提到typescript(以下统称为“TS”)中原始数据类型的一些声明方式,不难看出,TS中的数据定义方式跟JS是大同小异的,但是在JS中,我们常常会声明一个变量,如:
var a; // 声明变量a
此时,我们在后台打印a的值是undefined,因为我们定义了变量a,但是没有赋值,在声明之后,我们可以随意给变量a赋值,例如:
a = 1; 或者 a = 'string'; 或者 a = true;
在TS中,为了便于我们开发,我们同样可以这样声明变量,然后给它赋任意类型的值,这样也便于我们开发,格式如下:
let a; a = 1; // 第一种方式:声明时不指定任意数据类型,随后赋值任意类型
let a : any = 1; a = 'string'; // 第二种方式:指定类型为any,也可赋值任意类型
到这里,我们在开发中常用的几种数据定义方式也就介绍完毕。
有的童鞋会问,在TS中定义数据还要标注类型,这样不是很繁琐,下面我们就来说一下在TS中,有一种叫做数据类型推论的特性,类似于JS中的typeof()的方式,如下:
let a = 1; // 我们定义变量a的值为1,此时值1为数值类型
我们在上面定义变量a的值为1,接下来我们直接给赋另一种类型的值:
a = 'string'; // 随后再定义变量a的值为字符串类型'string'
这个时候我们编译ts文件时会发现,编译报错:"index.ts(2,1): error TS2322: Type 'string' is not assignable to type 'number'.",根据报错我们可以发现,在第一次定义变量a为数值1时,TS中自动将变量a的类型定义为数值类型,所以我们在后面再定义为其它类型时,TS时不能正常编译的。
所以我们得出结论,TS在编译过程中,会自动给为定义的变量默认加上一个类型属性,这个就是TS中的数据类型推论,而且是以最先赋值的数据类型为准(let a;定义方式除外,此定义方式为任意数据类型定义)。
到底啦!!!!