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 // 断言的第二种写法
相关推荐
咕白m6256 分钟前
用 Python 实现一键批量查找与替换 Excel 数据
后端·python
疯狂的魔鬼22 分钟前
一套 Schema 驱动四视图:记 useCrudSchemas 的设计与实践
前端·javascript·typescript
风骏时光牛马25 分钟前
大模型开发工具高频故障与实操问题汇总代码案例大全
前端
云技纵横26 分钟前
@Transactional 里套 REQUIRES_NEW,为什么会把连接池耗尽?
后端·面试
没落英雄30 分钟前
2. 让 Agent 能读写文件、执行命令 —— LocalShellBackend 实战
前端·人工智能·架构
白雾茫茫丶30 分钟前
探索 Nuxt.js 全栈能力:用 Better-Auth 打造类型安全的 RBAC 权限系统
前端·vue.js·nuxt.js
tcdos31 分钟前
不止扫码 — 微信生态深度融合(登录 + 支付 + 消息)
后端·微信小程序
程序员cxuan34 分钟前
Anthropic 大面积封号,连大 V 都忍不了开喷了。
人工智能·后端·程序员
奇奇怪怪的39 分钟前
检索增强——混合检索、Re-rank 与 Query 优化
前端
user622298649258143 分钟前
React 常用技术知识全景:从组件到 Hooks 的系统理解
前端