我们知道在js中数据类型分为原始类型(基本类型)和对象类型(引用类型)
ts中以: 指定变量的类型,: 的前后有没有空格都可以。在ts中,可以定义从简单到复杂的几乎一切类型。 ts包含的数据类型如下:
首先介绍js中的基本类型在ts中的应用:
1:布尔类型:
在ts中使用boolean来定义布尔类型
let flag: boolean=true
2:数字类型:number
let count: number=6
// 当然有二进制0b,八进制0o,十六进制0x开头
3:字符串类型: string
let name: string='wang'
4:null
表示对象值缺失
let url: null =null
// 编译之后其实就是 let url=null
5:undefined
用于初始化变量为一个未定义的值
let url: undefined=undefined
// 编译之后其实就是 let url=undefined
let url: undefined
// 编译之后为 let url
我们知道在js中,当声明变量未初始化值时,其默认值就是undefined
6:void
用于标识方法返回值的类型,表示该方法没有返回值。
function hello():void{
console.log('hellWorld !')
}
hello();
7:object
表示除基本类型(string,boolean,number,null,undefined,symbol)之外的类型
let obj:object={name:'wang',age:1}
8:symbol
与es6中的应用相同【在symbol出现之前,对象的键只能是字符串,symbol的第一个作用就是可以作为对象的属性,还有像防止属性名冲突等作用,但这个类型在实际开发中都用得比较少】
let sym: symbol= Symbol()
const ename: unique symbol = Symbol();
const a = {
[ename]: 'funlee',
}
console.log(a[ename]); // funlee
9:数组类型
在ts中,声明数组类型的方式有两种:
1:类型 + 方括号 表示法
let fibonacci: number[] = [1, 1, 2, 3, 5];
// 需要注意的是,在声明的项中不可以出现其他类型,如果在fibonacci中出现string类型,则在编译之前,
ts的静态类型检查就会提示你错误,当然即使是编译不通过,也一样可以生成对应的js文件,如果想在报错的时候
终止js文件的生成,需要在tsconfig.json文件中进行配置
let fibonacci: any[] = [1, '1', 2, 3, 5];
如果你就是需要在数组中混用多种类型,则可以声明为any
2:数组泛型方式 (是不是感觉很像java~)
let fibonacci: Array<number> = [1, 1, 2, 3, 5];
同样,在确定了类型之后,那么在声明的变量中,就不可以出现其他的类型了
10:任意类型any
在上面的数组类型中,也提到了any,声明为 any 的变量可以赋予任意类型的值
1:如果一个变量是普通类型,在赋值过程中改变类型是不被允许的,如:
let name: string='wang'
name=7
此时在静态类型检查时就会提示错误
如果是any类型,则可以复制为不同类型的值
2:在任意值上访问任何属性和方法,都是允许的
let anyThing: any = 'hello';
anyThing.setName('Jerry');
console.log(anyThing.myName);
3:为声明类型的变量
变量如果在声明的时候,未指定其类型,那么它会被识别为任意值类型
let val // 等价于 let val:any
val='wang'
val=1
val.say('hello')
11:元组
我们可以与数组类型来进行对比,数组合并了相同类型的对象,而元组(Tuple)合并了不同类型的对象。
let Wang:[string,number]=['wang',10] //注意右边赋值的类型一定要与左边指定的类型一致
a:但是当直接【即=】对元组类型的变量进行初始化或者赋值的时候,需要提供所有元组类型中指定的项
let wang:[string,number]
wang=['Wang',10]
b:越界元素类型的检查
当添加越界元素时,所添加的元素类型为元组中每个类型的联合类型
let wang:[string,number]
wang=['WANG',1]
wang.push(1)
wang.push(false) // Argument of type 'false' is not assignable to parameter of type 'string | number'
12:枚举类型 enum
枚举类型用于取值限定在一定范围内的场景,如时间只能取星期一到星期天,颜色只能是红绿蓝等
a:枚举成员默认被赋值为从 0 开始递增的数字
enum Color {Red, Green, Blue};
let color:Color=Color.Blue
console.log(color) // 2
b:但是如果我们手动对枚举成员的某一项进行了赋值,则未手动赋值的枚举项会接着上一个枚举项递增
enum Color {Red, Green=3, Blue};
let color:Color=Color.Blue
console.log(color) // 4
c:常数枚举 使用const enum 声明
const enum Color {Red, Green, Blue}
let col=[Color.Red,Color.Green,Color.Blue]
常数枚举与普通枚举的区别是,它会在编译阶段被删除,并且不能包含计算成员。
上面编译后的结果为:
var col = [0 /* Red */, 1 /* Green */, 2 /* Blue */];
13:never类型
never类型是ts中的底层类型,代表永远不会发生的类型。 never类型只能被赋值给另一个never