一、类型声明
- 类型声明是TS非常重要的一个特点。
- 通过类型声明可以指定TS中变量(参数、形参)的类型。
- 指定类型后,当为变量赋值时,TS编译器会自动检查是否复核类型声明,复核则赋值,否则报错。
- 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值。
- 语法:
let 变量 : 类型;
let 变量 : 类型 = 值;
function fn(参数:类型,参数:类型) : 类型{
...
}
二、自动类型判断
- TS拥有自动的类型判断机制。
- 当对变量的声明和赋值时同时进行的,TS编译器会自动判断变量的类型。
- 所以如果你的变量的声明和赋值时同时进行的,可以省略类型声明。
三、使用方式
1.数字类型
定义一个变量表示任意数字:
let num:number;
num = 10;
let num1 : number = 10;
2.字符串类型
定义一个变量表示任意字符串:
let str : string;
str = 'helloworld';
let str1 : string = 'ts';
3.布尔类型
定义一个变量表示布尔值:
let bool : boolean;
bool = true;
let bool1:boolean = false;
知识点:如果想一个变量表示多个类型,可以用 | 来联合,如下
let lh:boolean | string;
lh = true;
lh = 'hello';
4.any类型
表示的任意类型,一个变量设置类型为any后,相当于对改变量关闭了TS的类型检测.
使用TS时,不建议使用any类型。
let any1 : any;
// let any1; // 如果变量后面没有带类型,就隐式具有“any”类型
any1 = 10;
any1 = 'hello';
any1 = true;
5.unknown类型
表示未知类型
let unk :unknown;
unk = 10;
unk = 'hello';
unk = true;
注意点:当定义了一个变量a,any类型可以赋值给a,而unknown却不行
let a : string;
a = any1;
//a = unk; 这里会报错
所以可以说unknown实际上就是一个类型安全的any。
但类型断言,可以用来告诉解析器变量的实际类型,就可以完成赋值
a = unk as string;
a = <string>unk;
6.void类型
void用来表示空,以函数为例,就表示没有返回值的函数
function fn():void{
return;
}
注意:fn()后面跟了类型,那么返回值就要返回对应的类型,否则报错,如
function fn():number{
return 123;
}
7.never类型
never 表示永远不会返回结果,一般用于抛出错误,然后函数停止
function fn1():never{
throw new Error('报错了!')
}
8.object类型
表示一个js对象,但是这个并不是很实用,因为在js中对象太多了,一切皆对象,如下
let obj: object;
obj= {};
obj= function(){}
那么问题来了,如果我们不用这个,我们用什么来表示对象。其实我们在限制一个对象,更重要是限制其所包含的属性值。
let obj1:{name:string};
obj1 = {name : 'lilei'}
在这里要注意,声明时有多少个属性,赋值就要一一对应,否则报错。但是,如果在属性名后面加一个?则表示属性是可选的
let obj2:{name:string,age?:number};
obj2 = {name : 'lilei'}
如果不确定赋值时有多少个属性时,我们可以用[propName:string]:any 表示任意类型的属性,如
let obj3:{name:string,[propName:string]:any};
obj3 = {name:'lei',a:1,b:3}
9.array类型
数组类型的声明有两种,表示同一个类型的数组
- 类型[]
- Array<类型>
// sring[] 表示字符串数组
let arr:string[];
arr = ['a','b']
// number[]表示数值数值
let arr1:number[]
let arr2 :Array<number>
arr2 = [1,2,3]
10.元组
元组,就是固定长度的数组,语法:[类型,类型…]
let tup : [string,string]
tup = ['hello','world']
11.枚举
枚举类型用于定义数值集合。
enum Color {Red, Green, Blue};
let c: Color = Color.Blue;
console.log(c); // 输出 2
知识点:我们上边用 | 可以定义多个类型,如果用&呢?他表示同时
let a :string & number;
但实际上是没有这样一个变即属于字符有属于数字,所以这里是没意思的,一般用于对象的属性值,如下
let obj : {name:string} & {age:number}
obj = {name:'aa',age:12}
还有一个类型的别名
type myType = 1 | 2 | 3 | 4;
let a : myType;
let b: myType;
let c: myType
这里的话a,b,c的类型都是myType。