类型声明

  1. 类型声明是TS非常重要的一个特点
  2. 通过类型声明可以指定TS中变量(参数、形参)的类型
  3. 指定类型后,当为变量赋值时,TS编译器会自动检查值是否符合类型声明,符合则赋值,否则报错
  4. 简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值
语法:let 变量: 类型; let 变量: 类型 = ; function fn(参数: 类型, 参数: 类型): 类型{ }

自动检测

  1. TS拥有自动的类型判断机制
  2. 当对变量的声明和赋值是同时进行的,TS编译器会自动判断变量的类型
  3. 所以如果你的变量的声明和赋值时同时进行的,可以省略掉类型声明

例: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中新增类型
  1. 使用字面量来进行类型检测

let a: 10; // a的值只能为10

可以用 | 连接多个类型:let c: 10 | ‘mine’; // c的值可以为10或mine

  1. any—一个变量设置类型为any,相当于该变量关闭了TS的类型检测(使用TS时,不建议使用)

声明变量时:let d : any;// 显式any let d;//隐式any

  1. unknown 用法与any类似,但any类型的值可以赋值给任何变量(无需判断),但unknown不可以直接赋值unknown赋值前需要判断
let d: unknown d = ‘mine’ if (d === ‘mine’ || d === 10) c = d 类型断言:告诉编译器变量的实际类型—两种方法都可以
  1. 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. 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>
  1. void 表示为空,常用于函数没有返回值的情况
  2. never 表示永远都不会返回结果,常用于函数报错(报错后立马停止,也就不会有返回值)

例:function fun1(): never{

thrownewError(‘报错了!’) }
  1. object 对象,一般用来限制对象内属性的类型,而不是单单规定一个对象

语法:{属性名:类型,属性名:类型}

  1. 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有且只有nameage两个属性,不可多,不可少</font>
  2. 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. 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 }

  1. 函数 指定参数类型以及函数返回值的类型
function sum (a: number, b: number): number { return a + b;}
  1. 数组 指定数组内只能存储元素的类型
    1. 数组:类型[ ]
    2. 数组:Array<类型>

例:let e : string[] // 数组内只能是字符串类型的

let g : Array<number> // 数组内只能是数字类型的
  1. 元组 固定长度的数组,一般不长,长的话用数组

语法:[类型,类型]

let h : [string, number] //h内只有两个元素,且一个为字符,一个为数字,不可多不可少
  1. 枚举 需要用enum定义一个枚举

例:enum Gender { Man = 0, Women = 1}

  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 }