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 // 断言的第二种写法
相关推荐
风象南3 小时前
我把大脑开源给了AI
人工智能·后端
万少6 小时前
HarmonyOS 开发必会 5 种 Builder 详解
前端·harmonyos
橙序员小站8 小时前
Agent Skill 是什么?一文讲透 Agent Skill 的设计与实现
前端·后端
怒放吧德德8 小时前
Netty 4.2 入门指南:从概念到第一个程序
java·后端·netty
雨中飘荡的记忆10 小时前
大流量下库存扣减的数据库瓶颈:Redis分片缓存解决方案
java·redis·后端
炫饭第一名10 小时前
速通Canvas指北🦮——基础入门篇
前端·javascript·程序员
王晓枫11 小时前
flutter接入三方库运行报错:Error running pod install
前端·flutter
符方昊11 小时前
React 19 对比 React 16 新特性解析
前端·react.js
ssshooter11 小时前
又被 Safari 差异坑了:textContent 拿到的值居然没换行?
前端
开心就好202511 小时前
UniApp开发应用多平台上架全流程:H5小程序iOS和Android
后端·ios