定义
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 // 断言的第二种写法