TypeScript -类型断言的简单理解

类型断言是干啥的

类型断言 : 是手动的给某个变量 指定类型,从而可以方便操作该类型的属性和方法。

类型断言的两种写法

方式一 : 变量名 as 类型

ts 复制代码
let x: number | string = 'abc';
console.log((x as string).length); // 输出 3 ,因为是个字符串

方式二 :<类型> 变量名

ts 复制代码
let x: number | string = 'abc';
console.log((<string>x).length); // 输出 3 ,因为是个字符串

类型断言的理解误区

注意 :

1、类型断言只是为了方便明确变量的类型,而不是将变量的类型进行改变!!!

2、因此,类型断言在使用的时候,建议 在我们已经明确知道变量是什么类型的时候使用,

这样才能够真正发挥类型断言的作用。

例如 :

ts 复制代码
let x:number = 123;
// 这样写,ts 并不会报错,
//但是 实际上并不会将 x 真正的转为string 类型,最终的输出结果是 undefined
console.log((<string>x).length)

举个例子理解一下

ts 复制代码
// 定义一个函数
function m1(x : string  | number){
    console.log((x as string).length)
}

// 分别用不同类型的数据参数调用一下函数
m1(1234567890); // undefined
m1('1234567890'); // 10

结果分析:

1、函数的作用是 : 输出字符串参数的长度

2、第一次调用的参数是数值类型,没有 length 属性,因此输出 undefined

3、第二次调用的参数是字符串类型,正常输出字符串的长度10
小结:

类型断言并不是类型转换!

类型断言并不是类型转换!

类型断言并不是类型转换!

特殊的any

为什么要特别提一下 any 这个类型呢。

因为 any 类型会覆盖 ts 的类型检查,没有类型之后就可以任意操作了,自由自在。

所以,在进行类型断言的时候,要慎重使用。

任意类型断言为any

放飞自我的任意类型any,变量可以随意赋值,又回到了最初js中的状态,无拘无束。

ts 复制代码
let y : string | number;
// 断言为 any 类型之后,随便写,不会提示错误,而且运行正常
(<any>y) = {
    a:'aaa',
    b:'bbb'
}
console.log(y); // { a: 'aaa', b: 'bbb' }

any 断言为其他具体类型

被强加的束缚,不再自由,卑微的活着。

嗯,其实也不算卑微,因为此时我们必然是知道具体的类型了,反正就是这样。

ts 复制代码
// 将any 断言为一个具体的类型
let z : any = '123';
console.log((<string>z).length); // 3
相关推荐
庸俗今天不摸鱼16 分钟前
【万字总结】前端全方位性能优化指南(十)——自适应优化系统、遗传算法调参、Service Worker智能降级方案
前端·性能优化·webassembly
QTX1873017 分钟前
JavaScript 中的原型链与继承
开发语言·javascript·原型模式
黄毛火烧雪下23 分钟前
React Context API 用于在组件树中共享全局状态
前端·javascript·react.js
Apifox34 分钟前
如何在 Apifox 中通过 CLI 运行包含云端数据库连接配置的测试场景
前端·后端·程序员
一张假钞36 分钟前
Firefox默认在新标签页打开收藏栏链接
前端·firefox
高达可以过山车不行37 分钟前
Firefox账号同步书签不一致(火狐浏览器书签同步不一致)
前端·firefox
m0_5937581038 分钟前
firefox 136.0.4版本离线安装MarkDown插件
前端·firefox
掘金一周41 分钟前
金石焕新程 >> 瓜分万元现金大奖征文活动即将回归 | 掘金一周 4.3
前端·人工智能·后端
三翼鸟数字化技术团队1 小时前
Vue自定义指令最佳实践教程
前端·vue.js
Jasmin Tin Wei1 小时前
蓝桥杯 web 学海无涯(axios、ecahrts)版本二
前端·蓝桥杯