typescript教程:unknown类型

介绍

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、又要兼容多种类型时

总结

  1. unknown = 不确定类型的安全容器
  2. 什么值都能装,但不能直接乱用
  3. 比 any 严格、更安全,企业开发优先用 unknown 代替 any

原文出处:/show_1GW3DNY4rKPR.html