关于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证明这个值确实是某一个类型
相关推荐
梦帮科技5 小时前
GRAVIS v4.0:基于Web的极速套利架构设计与实时数据流实现
前端·人工智能·rust·自动化·区块链·智能合约·数字货币
爱勇宝6 小时前
办公资料反复修改、补传、交接混乱,我做了个桌面工具来解决这件事
前端·后端·程序员
微信开发api-视频号协议6 小时前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
甲维斯6 小时前
Fable5:20美金的顶级设计师!
前端·人工智能
kyriewen7 小时前
我同时用了 Claude Code、Cursor 和 Codex,说说三个工具的真实差距——2026 年选错工具比不用 AI 更浪费时间
前端·ai编程·claude
Jackson__7 小时前
为了拯救我的腰椎和颈椎,我做了款浏览器插件!
前端·javascript·开源
闲猫7 小时前
Python FastAPI + SQLAlchemy 入门教程:从零搭建你的第一个 Web 应用
前端·python·fastapi
林小帅8 小时前
NestJS v11 + Prisma v7 ESM 迁移配置解析
前端·javascript·后端
IT_陈寒8 小时前
React的setState竟然不是立刻生效的,害我调试半天
前端·人工智能·后端
简简单单就是我_hehe8 小时前
前端埋点日志解决方案:完整 User-Agent 解析工具实现,爬虫识别、设备品牌、操作系统、浏览器版本全解析(附完整源码)
前端·爬虫