类型声明
- 类型声明是TS非常重要的一个特点
- 通过类型声明可以指定TS中变量(参数、形参)的类型
- 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
- 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值
自动检测
- TS拥有自动的类型判断机制
- 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
- 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明
例:let a = 3; // 默认a是number类型的,以后赋值时也必须是number的
类型
类型 | 例子 | 描述 |
---|---|---|
number | 1, -33, 2.5 | 任意数字 |
string | ‘hi’, “hi”, hi |
任意字符串 |
boolean | true、false | 布尔值true或false |
字面量 | 其本身 | 限制变量的值就是该字面量的值 |
any | * | 任意类型 |
unknown | * | 类型安全的any |
void | 空值(undefined) | 没有值(或undefined) |
never | 没有值 | 不能是任何值 |
object | {name:’孙悟空’} | 任意的JS对象 |
array | [1,2,3] | 任意JS数组 |
tuple | [4,5] | 元素,TS新增类型,固定长度数组 |
enum | enum{A, B} | 枚举,TS中新增类型 |
- 使用字面量来进行类型检测
let a: 10; // a的值只能为10
可以用 | 连接多个类型:let c: 10 | ‘mine’; // c的值可以为10或mine
- any—一个变量设置类型为any,相当于该变量关闭了TS的类型检测(使用TS时,不建议使用)
声明变量时:let d : any;// 显式any let d;//隐式any
- unknown 用法与any类似,但any类型的值可以赋值给任何变量(无需判断),但unknown不可以直接赋值unknown赋值前需要判断
1. <font style="color:#001080;background-color:#ffffff;">c</font><font style="color:#000000;background-color:#ffffff;"> = </font><font style="color:#001080;background-color:#ffffff;">d </font><font style="color:#af00db;background-color:#ffffff;">as </font><font style="color:#a31515;background-color:#ffffff;">'mine'</font><font style="color:#000000;background-color:#ffffff;"> | </font><font style="color:#098658;background-color:#ffffff;">10 </font>
2. <font style="color:#001080;background-color:#ffffff;">c</font><font style="color:#000000;background-color:#ffffff;"> = <</font><font style="color:#a31515;background-color:#ffffff;">'mine'</font><font style="color:#000000;background-color:#ffffff;"> | </font><font style="color:#098658;background-color:#ffffff;">10</font><font style="color:#000000;background-color:#ffffff;">> </font><font style="color:#001080;background-color:#ffffff;">d</font>
- void 表示为空,常用于函数没有返回值的情况
- never 表示永远都不会返回结果,常用于函数报错(报错后立马停止,也就不会有返回值)
例:function fun1(): never{
thrownewError(‘报错了!’) }- object 对象,一般用来限制对象内属性的类型,而不是单单规定一个对象
语法:{属性名:类型,属性名:类型}
1. <font style="color:#0000ff;background-color:#ffffff;">let </font><font style="color:#001080;background-color:#ffffff;">ob</font><font style="color:#000000;background-color:#ffffff;">: { </font><font style="color:#001080;background-color:#ffffff;">name</font><font style="color:#000000;background-color:#ffffff;">: </font><font style="color:#267f99;background-color:#ffffff;">string</font><font style="color:#000000;background-color:#ffffff;">, </font><font style="color:#001080;background-color:#ffffff;">age</font><font style="color:#000000;background-color:#ffffff;">: </font><font style="color:#267f99;background-color:#ffffff;">number</font><font style="color:#000000;background-color:#ffffff;">} --表明ob有且只有name和age两个属性,不可多,不可少</font>
2. <font style="color:#0000ff;background-color:#ffffff;">let </font><font style="color:#001080;background-color:#ffffff;">ob</font><font style="color:#000000;background-color:#ffffff;">: { </font><font style="color:#001080;background-color:#ffffff;">name</font><font style="color:#000000;background-color:#ffffff;">: </font><font style="color:#267f99;background-color:#ffffff;">string</font><font style="color:#000000;background-color:#ffffff;">, </font><font style="color:#001080;background-color:#ffffff;">age?</font><font style="color:#000000;background-color:#ffffff;">: </font><font style="color:#267f99;background-color:#ffffff;">number</font><font style="color:#000000;background-color:#ffffff;">} --表明ob里面必须有name属性,age可有可不有,不能多</font>
3. <font style="color:#0000ff;background-color:#ffffff;">let </font><font style="color:#001080;background-color:#ffffff;">ob</font><font style="color:#000000;background-color:#ffffff;">: { </font><font style="color:#001080;background-color:#ffffff;">name</font><font style="color:#000000;background-color:#ffffff;">: </font><font style="color:#267f99;background-color:#ffffff;">string</font><font style="color:#000000;background-color:#ffffff;">, [</font><font style="color:#001080;background-color:#ffffff;">xxx</font><font style="color:#000000;background-color:#ffffff;">: </font><font style="color:#267f99;background-color:#ffffff;">string</font><font style="color:#000000;background-color:#ffffff;">]: </font><font style="color:#267f99;background-color:#ffffff;">any</font><font style="color:#000000;background-color:#ffffff;"> } --表明ob里面必须有name属性,其余想添加什么都可以</font>
例:ob = { name:‘xuxu’, a:1, b:2, c:3 }
- 函数 指定参数类型以及函数返回值的类型
- 数组 指定数组内只能存储元素的类型
- 数组:类型[ ]
- 数组:Array<类型>
例:let e : string[] // 数组内只能是字符串类型的
let g : Array<number> // 数组内只能是数字类型的- 元组 固定长度的数组,一般不长,长的话用数组
语法:[类型,类型]
let h : [string, number] //h内只有两个元素,且一个为字符,一个为数字,不可多不可少- 枚举 需要用enum定义一个枚举
例:enum Gender { Man = 0, Women = 1}
- 类型别名 将一个标签作为标准
例:type p = string; let s : p; // 此时e就为字符串类型的
type myType = 1 | 2 | 3 | 4 | 5 let k: myType; // 此时k的类型为myType注:可以用&来定义一个对象:let j: { name: string } & { age: number } //要求j中包含两个属性且类型不能变
j = { name : ‘yuyu’, age : 12 }