3、TS中的类型断言

TS中的类型断言

声明类型的时候 如果没有标识类型 他是什么类型?

typescript 复制代码
//没有赋值的变量默认都是undefined 类型是any
let a: any = undefined
typescript 复制代码
//const是一个常量 不能被修改  他的类型是字面量类型 const声明变量必须赋值
//let 声明变量 可以修改  所以类型范围推倒的结果会变大
let b1 = 1
const b = 1

断言的问题

typescript 复制代码
let str0rNum: string | number //如果是联合类型在使用方法的时候 只能采用 公共的方法来使用
//还是从安全性考虑,在使用联合方法的时候,我们会通过先定义   再使用  保证安全

1、指定类型再使用

typescript 复制代码
 str0rNum = 'abc'
 str0rNum.endsWith('c')
 console.log(str0rNum)
 str0rNum = 1234
 str0rNum.toFixed(2)
 console.log(str0rNum)

2、我们断言类型后再使用 as断言成某种类型(一定是联合类型中的某一个)!(非空断言,表示这个值一定不是空的)

typescript 复制代码
//不存在结果 自己承担,ts不管了  你认为一定有值
 //(str0rNum! as string).charCodeAt(0)
 (<number>str0rNum!).toFixed(2)

!是TS语法 ?是JS语法 链判断运算符 (如果有值再去取值)

typescript 复制代码
//  let ele=document.getElementById('APP')! //非空断言

let ele = document.getElementById('app')
//  ?表示的是取值 不能赋值  !表示 某个变量一定存在   

if (ele) {
    //  ele?.style.background
    ele!.style.background = 'red';//非空断言
    (ele as HTMLElement).style.background = 'red';
}//断言成某种类型

值 as xxx或者值 一般用于联合类型 将大范围的类型断言成小类型

typescript 复制代码
(str0rNum! as unknown as boolean)//双重断言,一般不建议使用,但是还是会用到。会破坏原有的关系
typescript 复制代码
//?? js语法 合并空值运算符,三元表达式 但是 false||取的结果
let val = 0 || 100;//除了null和undefined之外的值都会被当做true
typescript 复制代码
// direction = 'up' ?? 'down' ?? 'left' ?? 'right';//?? 优先级高于||
type Direction = 'up' | 'down' | 'left' | 'right';//快速构建一个可以复用的类型
let direction: Direction;
let up: 'down' = direction! as 'down'

下面是完整代码,可自行运行

typescript 复制代码
//声明类型的时候 如果没有标识类型 他是什么类型?

//没有赋值的变量默认都是undefined 类型是any
let a: any = undefined

//const是一个常量 不能被修改  他的类型是字面量类型 const声明变量必须赋值
//let 声明变量 可以修改  所以类型范围推倒的结果会变大
let b1 = 1
const b = 1

//断言的问题
let str0rNum: string | number //如果是联合类型在使用方法的时候 只能采用 公共的方法来使用
//还是从安全性考虑,在使用联合方法的时候,我们会通过先定义   再使用  保证安全

// 1).指定类型再使用
// str0rNum = 'abc'
// str0rNum.endsWith('c')
// console.log(str0rNum)
// str0rNum = 1234
// str0rNum.toFixed(2)
// console.log(str0rNum)

//2).我们断言类型后再使用  as断言成某种类型(一定是联合类型中的某一个)!(非空断言,表示这个值一定不是空的)
//不存在结果 自己承担,ts不管了  你认为一定有值
// (str0rNum! as string).charCodeAt(0)

(<number>str0rNum!).toFixed(2)

//!是TS语法  ?是JS语法  链判断运算符 (如果有值再去取值)

//  let ele=document.getElementById('APP')! //非空断言

let ele = document.getElementById('app')
//  ?表示的是取值 不能赋值  !表示 某个变量一定存在   

if (ele) {
    //  ele?.style.background
    ele!.style.background = 'red';//非空断言
    (ele as HTMLElement).style.background = 'red';
}//断言成某种类型

//值 as xxx或者<xxx>值  一般用于联合类型 将大范围的类型断言成小类型
(str0rNum! as unknown as boolean)//双重断言,一般不建议使用,但是还是会用到。会破坏原有的关系


//?? js语法 合并空值运算符,三元表达式 但是 false||取的结果
let val = 0 || 100;//除了null和undefined之外的值都会被当做true


// direction = 'up' ?? 'down' ?? 'left' ?? 'right';//?? 优先级高于||
type Direction = 'up' | 'down' | 'left' | 'right';//快速构建一个可以复用的类型
let direction: Direction;
let up: 'down' = direction! as 'down'

export { }//解决ts文件报错问题  模块化的问题
相关推荐
yrldjsbk22 分钟前
uniapp开发09-设置一个tabbar底部导航栏且配置icon图标
前端·uni-app
源码方舟1 小时前
【HTML5】显示-隐藏法 实现网页轮播图效果
前端·javascript·html·css3·html5
二川bro1 小时前
依赖注入详解与案例(前端篇)
前端
神秘代码行者3 小时前
Vue项目Git提交流程集成
前端·vue.js·git
阿黄学技术4 小时前
Vite简单介绍
前端·前端框架·vue
264玫瑰资源库5 小时前
网狐飞云娱乐三端源码深度实测:组件结构拆解与部署Bug复盘指南(附代码分析)
java·开发语言·前端·bug·娱乐
济南壹软网络科技-专注源码开发数十年!5 小时前
盲盒源码_盲盒系统_盲盒定制开发 盲盒搭建前端教程
开发语言·前端·uni-app·php
哟哟耶耶6 小时前
react-13react中外部css引入以及style内联样式(动态className与动态style)
前端·css·react.js
A_aspectJ6 小时前
【Bootstrap V4系列】学习入门教程之 组件-卡片(Card)高级用法
前端·学习·bootstrap
DT——6 小时前
ECMAScript 6(ES6):JavaScript 现代化的革命性升级
前端·javascript·ecmascript