介绍
TypeScript 自带 unknown 类型,代表:未知的、暂时不确定是什么类型的数据。
特点
所有类型,都可以赋值给 unknown
let val: unknown
val = 100 // 数字 ✅
val = "你好" // 字符串 ✅
val = { name: ''}// 对象 ✅
val = [] // 数组 ✅
unknown 不能直接使用
不能直接打点、调用方法、赋值给普通类型,TS 会直接报错,防止乱写代码:
let val: unknown
// 全部报错 ❌
val.length
val.toFixed()
val.name = "小明"
let str: string = val
怎么使用
两种合法方式:
方式1:先做类型判断(最安全)
let val: unknown
if (typeof val === "string") {
// 确定是字符串,才能调用 length
console.log(val.length)
}
if (typeof val === "number") {
console.log(val.toFixed(2))
}
方式2:类型断言(告诉TS我知道是什么类型)
let val: unknown
// 强行指定为字符串类型
const text = val as string
unknown 和 any 最大区别
- any:摆烂模式,关闭所有类型检查,随便写、随便调用,容易藏 bug
- unknown:安全模式,允许存放任意值,但限制随意操作,必须校验类型才能使用
适用场景
- 接口返回的原始数据
- 本地缓存读取的数据
- 函数接收「不确定类型」的参数
- 不想用 any、又要兼容多种类型时
总结
unknown= 不确定类型的安全容器- 什么值都能装,但不能直接乱用
- 比
any严格、更安全,企业开发优先用unknown代替any