TypeScript之数据类型(一)

TypeScript数据类型和使用

  • 1.布尔类型(boolean)
  • 2.数值类型(number)
  • 3.字符串类型(string)
  • 4.undefined 和 null类型
  • 5.数组类型(array)
  • 6.枚举类型(enum)
  • 7.元组类型 (Tuple)
  • 8.任意类型(any)和类型推断
  • 9.绝不类型(never)
  • 10.联合类型(多种类型)
  • 11.总结

Typescript中基本数据类型:布尔类型(boolean)、数值类型(number)、字符串类型(string)、undefined、null等。还有其他数组,元组等类型。

定义的基本格式( 声明 变量名:变量类型 = 赋值)

1.布尔类型(boolean)

//声明一个名字为bool,类型为boolean的变量,赋值为true
let bool: boolean = true;  

2.数值类型(number)

//声明一个名字为num,类型为number的变量,赋值为100
let num: number = 100;  

3.字符串类型(string)

//声明一个名字为num,类型为number的变量,赋值为100
let str: string = "狗蛋娃"  

4.undefined 和 null类型

在typescript中undefined 和 null定义和上面三种类型一样,并且是他们的子集。

//声明变量分别为a1,a2,类型分别为undefined,null,并分别赋值undefined,null
let a1 : undefined = undefined;
let a2 : null = null;  

因为undefined 和 null是boolean,number,string的子集,所以执行下面代码不会报错

let a1 : undefined = undefined;
let a2 : null = null;  
//undefined和null赋值给boolean,number,string类型的变量
let b1 : number = a1;
let b2 : string = a1;
let b3 : boolean = a1;

let c1 : number = a2;
let c2 : string = a2;
let c3 : boolean = a2;

5.数组类型(array)

数组有常用的有两种定义方式

//声明一个名字为num,类型为number的变量,赋值为100
let list:number[] = [1, 2, 3];  //number[]表示数组存储的类型number
let list:Array<number> = [1, 2, 3];  //泛型定义数组

6.枚举类型(enum)

枚举是列举固定几个值,直接定义变量的话的话可以随意定义,枚举只能使用你定义好的几个值,枚举是个类,定义的值是基本类型,类能有更多操作

//比如定义一个枚举类型Lang,
enum Lang { javascript, typescript, java, node, golang, }
//Lang有五个成员 默认值是从0开始 Lang.javascript 等于 0;Lang.typescript 等于 1
//也可以给枚举成员赋值
enum Lang { javascript = 'javascript',
		    typescript = 'typescript',
  		    java = 'java',
            node = 'node',
            golang = 'golang'
            }
//此时Lang.javascript等于'javascript'           

7.元组类型 (Tuple)

通过元组可以存储不同类型的元素,而非像数组那样只能存储相同元素类型 (any [ ] 除外)。

//定义一个元组存储三个元素,类型依次为 string, number,boolean 
let tup: [string, number, boolean] = ['狗蛋娃', 100 , true]   
//像数组一样通过下标访问元素  tup[0] tup[1]

如果其中一个值可有可无,在数据类型后面添加?,代表可以省略此属性

//元组tup1的三个属性第2个和第3个是可选的,第一个值是必须的
let tup1: [string, number?, boolean?] = ['狗蛋娃', 100 , true]  
tup1  = ['狗蛋娃', 100 ]  //只赋值前两个
tup1  = ['狗蛋娃',]   //只赋值第一个必须的值
//像数组一样通过下标访问元素  tup[0] tup[1]

8.任意类型(any)和类型推断

typescript的一个重要特性就是添加了静态类型,但有时候为了开发方便等,使用any类型代表变量可以是任意类型。或者可以动态赋值,typescript会自动推断出第一次赋值的类型。

//先声明a变量,这样相当于给a指定为任意类型(any)的变量
let a;a = 100;	//等价于 let a :any = 100; 
a = true;
a = "狗蛋娃";  

任意类型的数组 any [ ]。之前我在想这与元组的区别在哪?我认为区别就在于元组是必须按照定义的格式和顺序赋值,更加严格,毕竟这是ts的特性。

//任意类型数组 可以在数组里面存储任意类型的值
let anyList: any[] = [ "狗蛋娃", 100, { isObj: false }]

类型推断:声明变量后,不指定变量的类型时会在第一次赋值时根据值推断出变量的类型。

let a = 100;	//此时typescript自动推断出a的类型为number 
a = "狗蛋娃";    //此时再赋值会报错,因为第一次赋值已经推断出a的类型为number

如js那样书写,首先赋值a为100,此时a的类型为number,所有不能再赋值为其他类型的值。

9.绝不类型(never)

never 类型代表从来不会出现的值的类型。

//定义一个never类型的变量
let a: never;
a = 1  // 报错  不能赋值其他类型的值给never类型包括any类型

10.联合类型(多种类型)

有时候在开发中会需要一个值的类型是number或者string,该怎么办呢?除了使用any类型来定义变量满足需求,更加严格的就需要使用联合类型的定义方式。由于 never 是所有类型的子类型, 在联合类型中它始终被省略。

//定义变量a的类型是string或number或string类型的数组
let a : string | number | string[];  //类型之间使用 | 隔开
a = 100;  //a赋值为100,类型推断为number
a = "狗蛋娃";  //a赋值为"狗蛋娃",类型推断为string

//定义一个可以存储number和string的数组
let arr : (number | string)[] = [1, "狗蛋娃", 2];

11.总结

上面讲到了除了对象的所有数据类型,因为ts中的对象不像js那样直接定义,需要使用接口interface定义,事情好像并没有那么简单。这些数据类型在实际运用中需要灵活运用,还需学习函数,接口,类等搭配使用。

下一篇 TypeScript之interface定义对象(二)

你可能感兴趣的:(typescript,typescript,javascript)