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 // 断言的第二种写法
相关推荐
C_心欲无痕5 分钟前
ts - 模板字面量类型与 `keyof` 的魔法组合:`keyof T & `on${string}`使用
linux·运维·开发语言·前端·ubuntu·typescript
最贪吃的虎8 分钟前
Redis其实并不是线程安全的
java·开发语言·数据库·redis·后端·缓存·lua
一勺菠萝丶10 分钟前
Java 后端想学 Vue,又想写浏览器插件?
java·前端·vue.js
武子康12 分钟前
大数据-208 岭回归与Lasso回归:区别、应用与选择指南
大数据·后端·机器学习
@PHARAOH15 分钟前
HOW - 如何禁用 localstorage
前端·状态模式
霍理迪16 分钟前
CSS布局方式——弹性盒子(flex)
前端·css
qq_124987075316 分钟前
基于springboot归家租房小程序的设计与实现(源码+论文+部署+安装)
java·大数据·spring boot·后端·小程序·毕业设计·计算机毕业设计
moxiaoran575321 分钟前
Go语言的接口
开发语言·后端·golang
清风徐来QCQ21 分钟前
Cookie和JWT
后端·cookie
念你那丝微笑23 分钟前
uView Plus + Vue3 + TypeScript + UniApp 正确引入 UnoCSS(避坑版)
vue.js·typescript·uni-app