【TS】联合类型--类型断言--类型推断

联合类型

在实际开发中,我们接收的变量可能不是一个固定的数据类型,而是动态的多个数据类型,此时用单个固定的数据类型去接收很明显是不行的,为了解决这种可能会接收多个不同数据类型的变量就需要用到联合类型。联合类型表示取值可以为多种类型中的一种。
语法:let 变量名 : 数据类型 | 数据类型2 = 值

let str : string | number = '世界现代设计史'
 console.log(str);  // 世界现代设计史
 str = 100
 console.log(str);  // 100
//  str = true   // 报错

在函数中使用联合类型

// 该函数可以传入数字类型和字符串类型,返回值为字符串类型
const getString = (str:number|string):string =>{
    // return str  // 打印100 报错 返回的类型必须是字符串
    return str.toString()  // 转字符串,返回字符串类型
}
console.log(getString(100));


类型断言

类型断言也就是告诉编译器,我知道自己是什么类型,也知道自己在干什么。
类型断言的语法:
1、<类型>变量名 (<number[]>val)
2、变量名 as 类型 (val as number[])

类型断言也就是在编译的时候断定这个值是什么类型的,如果是的话就做什么操作。

let val : number[] = [100,200,300]  
// 如果val存在,那么它是一个数组类型的,输出val.length  
console.log((val as number[]).length);   // 打印 3

可以通过类型断言来做对应的操作,比如遍历一个数组:

let val : number[] = [100,200,300]  
// 如果val存在,那么它是一个数组,遍历数组
(<number[]>val).forEach(el=>{
    console.log(el);   // 打印 100,200,300
})

类型断言可以多重嵌套,比如双重类型断言
如果 val 存在,那么它是any类型的,如果val存在并且是any类型的,它则是number[]类型的,打印数组的长度

console.log(((val as any) as number[]).length);
// 打印 3


类型推断

类型推断: 在没有明确指定类型的时候,推测出一个类型。
声明一个变量,这个变量没有定义数据类型,系统会根据变量的值自动推断它是什么类型,并且以此类型为规范。

// 在没有明确指定类型的时候推测出一个类型
let txt = 100    // 推断 number类型
// txt = '东方不败' // 赋值 string类型 报错
console.log(txt);  // 打印 100

如果声明的变量没有赋值,那么这个变量为any类型,any类型的变量可以是任何数据类型。

let txt2   // 变量声明了没赋值 any类型
txt2 = 200
txt2 = '世界现代设计史'
console.log(txt2);


案例源码:https://gitee.com/wang_fan_w/ts-seminar

如果觉得这篇文章对你有帮助,欢迎点亮star

18 声望
5 粉丝
0 条评论
推荐阅读
微信小程序登录流程与实现
首先需要写一个微信小程序的登录弹窗,登录弹窗的作用就是发起登录,让用户点击授权后登录小程序,该弹窗是一个全局弹窗,因为小程序是有分享功能的,如果新用户是从分享的链接进来的,那么会先让新用户登录再做...

兔子先森阅读 104

Vue微信公众号开发踩坑记录
JS-SDK需要向服务端获取签名,且获取签名中需要的参数包括所在页面的url,但由于单页应用的路由特殊,其中涉及到iOS和android微信客户端浏览器内核的差异性导致的兼容问题

imwty132阅读 67.7k评论 81

手把手教你写一份优质的前端技术简历
不知不觉一年一度的秋招又来了,你收获了哪些大厂的面试邀约,又拿了多少offer呢?你身边是不是有挺多人技术比你差,但是却拿到了很多大厂的offer呢?其实,要想面试拿offer,首先要过得了简历那一关。如果一份简...

tonychen153阅读 17.9k评论 5

封面图
正则表达式实例
收集在业务中经常使用的正则表达式实例,方便以后进行查找,减少工作量。常用正则表达式实例1. 校验基本日期格式 {代码...} {代码...} 2. 校验密码强度密码的强度必须是包含大小写字母和数字的组合,不能使用特殊...

寒青57阅读 8.5k评论 11

JavaScript有用的代码片段和trick
平时工作过程中可以用到的实用代码集棉。判断对象否为空 {代码...} 浮点数取整 {代码...} 注意:前三种方法只适用于32个位整数,对于负数的处理上和Math.floor是不同的。 {代码...} 生成6位数字验证码 {代码...} ...

jenemy49阅读 7.2k评论 12

再也不学AJAX了!(二)使用AJAX ① XMLHttpRequest
「再也不学 AJAX 了」是一个以 AJAX 为主题的系列文章,希望读者通过阅读本系列文章,能够对 AJAX 技术有更加深入的认识和理解,从此能够再也不用专门学习 AJAX。本篇文章为该系列的第二篇,最近更新于 2023 年 1...

libinfs42阅读 6.9k评论 12

封面图
CSS 绘制一只思否猫
欢迎关注我的公众号:前端侦探练习 CSS 有一个比较有趣的方式,就是发挥想象,绘制各式各样的图案,比如来绘制一只思否猫?思否猫,SegmentFault 思否的吉祥物,是一只独一无二、特立独行、热爱自由的(&gt;^ω^&lt...

XboxYan47阅读 3.3k评论 14

封面图
18 声望
5 粉丝
宣传栏