类型断言和可选链操作符有什么区别?
来源:6-9 大功告成 - SubMenu 下拉菜单编码第三部分

infjer
2021-06-29
老师你好,视频中源代码是这样写的
const openedSubMenus = context.defaultOpenSubMenus as Array<string>
const isOpend = (index && context.mode === 'vertical') ? openedSubMenus.includes(index) : false
我是先看一遍视频之后再试着写一遍代码,并没有注意到context.defaultOpenSubMenus的值可能是undefined,不过vscode很智能的自动帮我补了一个可选操作符,结果代码如下
const isOpend = (index && context.mode === 'vertical') ? context.defaultOpenSubMenus?.includes(index) : false
以上代码的运行结果是正常的,所以我想问:类型断言和可选链操作符有什么区别?(在这种情况下,似乎类型断言就没有必要了。。。)
写回答
1回答
-
同学你好
这里用类型断言的原因是比较快捷的解决 undenfined 的数据类型
如果不用类型断言,context.defaultOpenSubMenus 有可能是 undefined 在这里,假如使用类型守卫,也可以解决这个问题 if (context.defaultOpenSubMenus) { // 现在 defaultOpenSubMenus 就是 string[] 类型了 }
所以可选链操作符其实完成的是上面的工作,将 undefined 自动甄别掉了,https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Optional_chaining
所以结论是 类型断言 和 可选链操作符是两个维度的概念,一个是 ts 的特性,一个是 js 的特性,在这里它们恰好完成了同样的工作,不过它们的功能本身不具有可比性。
012021-07-08
相似问题