TS所有类型

类型 例子 描述
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;
  2. a = 10;

| 联合类型

使用|来连接多个类型
这样可以限制变量在某几个值之间

let a:"male"|"female";
b = "male";
b = "female";
let a:boolean|string;
a = true;
a = "hello";

any

任意类型
一个变量设置类型为any之后相当于对该变量关闭了TS的类型检测
使用TS时,不建议使用any类型
let d:any;//显式any

let d:any;
d = 10;
d = "hello";
d = true;

声明变量如果不指定类型,则TS解析器会自动判断变量的类型为any(隐式any)

unknown

未知类型的值

  • any可以赋值给任意变量,把别的变量的类型检查也关闭了
  • unknown类型变量的值不能直接赋值给别的变量

unknown实际上就是一类型安全的any
如果想要赋值,先检查数据类型

let d:unknown;
d = 10;
d = "hello";
d = true;
let s:string;

if(typeof d === "string"){
    s = d;
}

类型断言

可以用来告诉解析器变量的实际类型

语法

  • 变量 as 类型
  • <类型>变量
    s = e as string;
    s = <string>e;
    

    void

    ```typescript function fn(){

}//void

```typescript
function fn():void{

}

void用来表示空
以函数为例,就表示没有返回值的函数
函数只要有返回值就会报错

never

永远不会返回结果

function fn():never{
    throw new Error("报错了");
}

object对象

{}用来指定对象中可以包含哪些属性

语法

{属性名:属性值,属性名:属性自}

// object表示一个js对象
let a:object;//一般不用
let b:{name:string};
b = {name:"name1"};

加个问号表示属性是可选的

let b:{name:string,age?:number};
b = {name:"name1"};

[propName:string]:any表示可有任意类型的属性

let c:{name:string,[propName:string]:any};
c = {name:'name1',age:18,gender:'male'};

[propName:string]:string
属性值只能是字符串

设置函数结构的类型声明

语法

(形参:类型,形参:类型...) => 返回值

let d:(a:number,b:number) => number;
d = function(n1,n2){
    return n1+n2;
}

array

任意JS数组

所以数组的类型声明

类型[]

string[]表示字符串数组

let e:string[];
e = ['a','b','c'];

number[]

Array<类型>

Array<number>
表示数值数组

let f:number[];
let g:Array<number>;
g = [1,2,3];

Array<any>
表示任意类型

tuple

元组,就是固定长度的数组
元组的储存效率高些

语法

[类型,类型,类型]

let h:[string,number];
h = ['hello',18];

Enum枚举

在多个值之间选择的时候适合用枚举

enum Gender{
    Male = 0,
    Female = 1
}

let i:{name:string,gender:Gender};
i = {
    name:'name1',
    // 一般几个值之间的范围用数字
    gender:Gender.Male
}
console.log(i.gender === Gender.Male);

|和且&

  • 联合类型中是用|连接,表示的意思
  • &表示同时
    let j:{name:string} & {age:number};
    j = {name:'name1',age:18};
    

    类型的别名

    简化类型的使用
    type myType = 1|2|3|4|5;
    let k:myType;
    let l:myType;
    let m:myType;