TypeScript的新类型(二):unknown

定义

unknown的含义是:未知类型,适⽤于起初不确定数据的具体类型,要后期才能确定。可以理解为类型安全的any

  • unknown类型的变量可以 赋值给本身 任意类型的值
  • unknown类型的变量 不可以 赋值给任意类型(unknown除外)其他变量不能将类型"unknown"分配给类型"string"
  • unknown类型的变量 不可以 读取任意属性和方法(包括字面量为对象时读取对象内已有属性的情况),"x"的类型为"未知"
ts 复制代码
let x: unknown
x = 123
x = 'hello'
x = true
// unknown类型的变量【不可以】赋值给【任意类型(unknown除外)】的【其他变量】
let str: string
x = 'hi'
str = x // 报错:不能将类型"unknown"分配给类型"string"
let y: unknown
y = x // unknown类型的变量可以赋值给其他unknown类型的变量
// unknown类型的变量【不可以】读取【任意属性和方法】(包括字面量为对象时读取对象内已有属性的情况)
x = 'hello'
x.toUpperCase() // 报错:"x"的类型为"未知"
x.abc // 报错:"x"的类型为"未知"
x = {age: 18}
x.age // 报错:"x"的类型为"未知",(包括字面量为对象时读取对象内已有属性的情况)

如何把unknow赋值给其他数据类型

if判断

  • 加入if判断让ts放心可以继续执行
ts 复制代码
let x: unknown
let y: string
x = 'hellow'
if(typeof x === 'string'){
    y = x;
}

断言

  • 用断言告诉ts这个是什么数据类型
  • x as string断言的第一种写法
  • <string>x断言的第二种写法
ts 复制代码
let x: unknown
let y: string
x = 'hellow'
y = x as string // 断言的第一种写法
y = <string>x // 断言的第二种写法
相关推荐
whuhewei20 小时前
为什么客户端不存在跨域问题
前端·安全
妮妮喔妮21 小时前
supabase的webhook报错
开发语言·前端·javascript
无心水21 小时前
OpenClaw技术文档/代码评审/测试用例生成深度实战
网络·后端·架构·测试用例·openclaw·养龙虾
yivifu21 小时前
手搓HTML双行夹批效果
前端·html·html双行夹注
GetcharZp1 天前
告别 CGO 噩梦!这款“纯 Go”神器让你不用 GCC 也能调 C 库,部署快到飞起!
后端
奔跑的卡卡1 天前
Web开发与AI融合-第一篇:Web开发与AI融合的时代序幕
前端·人工智能
IT_陈寒1 天前
Redis批量删除的大坑,差点让我加班到天亮
前端·人工智能·后端
lolo大魔王1 天前
Go语言的反射机制
开发语言·后端·算法·golang
帆张芳显1 天前
智表ZCELL产品V3.6 版发布,新增系统预置右键菜单操作、页签栏操作等功能
前端·canva可画·excel插件
漂流瓶jz1 天前
运行时vs编译时:CSS in JS四种主流方案介绍和对比
前端·javascript·css