typescript 类型 上篇

1、自动类型

变量没有声明类型,在第一次赋值时会按照值的类型设置变量类型
这会导致编译过程再去判断,影响效率
自动类型必须要在第一次声明的时候就进行赋值,如果只声明,变量会被转化成any类型

/ let names = "haofusheng"; //转化成string类型
// names="dly"; //不报错
// names=23; //报错

// let names1; //转化成any类型
// names1="haofusheng"; //不报错
// names1=23; //不报错

2、字符类型string

字符类型与js规范相同
构造函数写法返回的是对象型,str会报错

// let str:string; //声明变量为字符型
// str="aaa"; //双引号写法
// str='bbb'; //单引号写法
// str=`ccc`; //字符模板写法,可换行
// str=1+"ddd"; //表达式返回值如果是字符型也可以

3、数值类型number

数值类型与js规范相同

// let num:number; //声明为数值型

// num=23; //整数
// num=-23; //负数
// num=23.333; //小数
// num=0x23; //16进制
// num=0o744; //8进制
// num=23e+5; //科学计数法

4、布尔类型 boolean

布尔类型与js规范相同

// let bool:boolean; //声明为布尔型
// bool=false; //直接赋值true/false
// bool=!0; //非来转化
// bool=3>4; //通过关系运算符来比较
// bool=isNaN(Number("2222")); //一些方法返回值也是布尔类型

5、null与undefined

null与undefined一般不会直接赋值给变量,他一般会通过联合类型与其他类型连用

// let obj:object | null;

// obj={a:1}; //定义对象
// obj=null; //添加清理标记

// let ids:number|undefined;

// ids=setTimeout(() => { //定时器标记
//     clearTimeout(ids);
//     ids=undefined; //清除定时器标记
// },100);

6、字面量

运用我们能看见的定义方式去规定变量类型
他一般会与联合类型一块使用这样做到定义多个类型
可以用在一些限制值的地方

// let a1:10; // a1的值只能是10
// let a2:"男" | "女"; //与联合类型一起使用
// let a3:10 | "aa" | true | null | undefined; //不同类型值也可以共存

7、联合类型 |

let b1:"值1" | "值2";

8、任意类型 any

any类型可以赋值任何类型,也可以赋值给任意类型,never类型除外
它相当于关闭了TS的类型检查
声明的变量如果不声明类型,就会默认为any类型

// let c1:any;
// let c2; //没有声明类型,默认也是any类型,但是不加编译会多一层判断

// c1=true;
// c1=123;
// c1="aaa";
// c1=null;

// c1=3;
// let c3:string; //声明c3是字符型
// c3=c1; //c1为数字,但是因为他是any类型,可以直接赋给非数值型

9、未知类型 unknown

unknown 在赋值时可以为任何类型,这一点与any一样
unknown 不可以赋值给任何类型
unknown 是一个只能影响自身的any类型,他不会影响其他的变量
unknown 可以赋值给any类型

// let d1:any;
// let d2:unknown="hellow";
// d2=23; // 自身可以赋值任何类型
// d2=null;
// d1=d2; //可以赋值给any类型

10、空 void

void类型值可以为空、null、undefined
它常用在函数没有返回值的地方
声明函数void类型的情况:返回null、undefined、什么不返回、return后什么不写

// function fn():void{ //当函数没有返回值或者返回值为null、undefined可以使用
//     return;
// }

// function fn1():void{

// }

11、没有返回值 never

never永远不会存在的类型、永远不会结束
它规定一个不会有的值
如果返回的是一个null或者undefined也算是值,也会报错
一个条件永远不会进入的时候里面的变量也是never
他唯一的返回值就是报错
never不可以赋值给任何类型,但是他不能被任何类型赋值,包括any

它可以用在死循环,如果这个死循环
可以用在分支语句,如果没有处理某个分支语句进入默认语句,在默认语句赋值never类型,最后报错

// function fn():never{ //这个函数永远不会执行完
//    while (true) {}
// }

// function fn2():never { //这个函数返回一个错误
//     throw new Error("这是一个错误");
// }


// type fnType = "aa" | "bb"; //参数的可选类型

// function fn3(value:fnType){ //函数执行传入参数限制为fnType中可选项
//     switch (value) { //传入参数处理,我们的理想是对每个参数都有相应的处理方法
//         case "aa":
//             break;
//         case "bb":
//             break;
//         default: //有不能处理的参数时进入default,从而报错,提醒添加处理分支
//             const improve:never=value;
//             break;
//     }
// }

有可能在添加fnType类型后,并没有在这里添加相应的处理分支,这时候就会进入default,由于never不能赋值任何类型,所以将参数赋值给never类型会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值