关于Typescript中的unknown和any类型

以下内容大部分来自此书 -->《Typescript编程》

any和unknown

如果说any是教父,那么unknown就是"惊爆点"电影中基努·里维斯饰演的FBI卧底Johnny Utah,他吊儿郎当,与坏人同流合污,但是内心却尊重法律,站在好人一边。那么unknown类型在ts中也是一样的。

any

先来看一下any,我们知道,使用any就像常规的JavaScript一样,类型检查器完全发挥不了作用,在代码中使用any就像使用巴雷特不开倍镜一样,只能进行"盲狙"。先来看一个例子:

js 复制代码
let a: any = 30 
let b = a === 123 
let c = a + 10
let d
if (typeof a === 'number') {
    console.log("a是number类型")
    d = a + 10
}
console.log(a, b, d)

此时编辑器也没有发出任何警告,光标移动到a上,显示a是any类型

运行代码也不会报错,正常输出结果

unknown

再来看unknown,将any改为unknown

js 复制代码
let a: unknown = 30 //unknown
let b = a === 123 // boolean
let c = a + 10
let d
if (typeof a === 'number') {
    console.log("a是number类型")
    d = a + 10
}
console.log(a, b, d)

可以看到编辑器直接发出警告

此时运行当然会报错 let c = a + 10注释掉再运行 可以看到此时结果正常输出,和上边的any结果相同,这是为什么呢,和使用any类型不同的是:我们把let c = a + 10这样一个无效操作去掉,然后就正常了,也许你注意到,我们在给d赋值的时候,先对a的类型做了一次判断,确定a是number时候才进行赋值操作,但是在和b进行比较的时候却直接可以进行比较。由此可以看出unknown的用法:

unknown的用法

  1. Typescript不会把任何值推导为unknown类型,必须显式注解
  2. unknown的类型可以进行比较
  3. 在执行操作时不能假定unknown类型的值为某种特定类型,必须先向Typescript证明这个值确实是某一个类型
相关推荐
有颜有货11 小时前
PMC生产排产的4种算法,一次讲清
java·服务器·前端
小虎牙00711 小时前
Android kotlin图片库Coil源码详解
android·前端
随风一样自由11 小时前
【前端领域】前端开发核心应用场景与落地实践
前端·前端框架
an3174212 小时前
弹窗数据流设计的两种高阶架构实践
前端·vue.js·架构
谢尔登12 小时前
【React】 状态管理方案
前端·react.js·前端框架
用户21366100357212 小时前
Vue商品详情与放大镜组件
前端·javascript
半个落月12 小时前
从Tapas小Demo理清localStorage、事件与this
前端·javascript
李明卫杭州12 小时前
Vue2 中 v-model 处理不同数据结构的技巧
前端·javascript·vue.js
李明卫杭州13 小时前
使用 computed 处理 v-model 复杂数据结构
前端·javascript·vue.js
丨我是张先生丨13 小时前
日语单词 Web Page
前端·css·css3