一、定义
该类型是typescript3中新定义的类型,相当于较为安全的any
- 任何类型都可以赋值给unknown类型
let a:number = 1
let b:unknown
b = a
- 没有类型断言或则其他类型控制流,不可以将其他类型复制给unknown类型
let a:unknown
let b:number
b = a // 报错
b = a as number
- 没有类型断言或则其他类型控制流,不可以对unknown进行任何操作
let a :unknown
(a as number)++
a++ // 会报错
- unknown类型只能(建议)进行全等和非全等操作
let a:unknown
let b:unknown
console.log(a === b );
console.log(a !== b );
console.log(a >= b ); // 不推荐
- 与其他类型进行交叉,为其他类型
let a:number & unknown
- any类型除外,与其他类型联合,结果只为unknown类型
let a:any | unknown
let b:number | unknown
- never是unknown类型的子类
type Mytype = never extends unknown? true : false
// typeof unknown类型 与 never全等
// 结果为true
- 将子类设定为unknown类时,不可方位其属性和方法。
class Person {
name:string = 'wds'
constructor(name:string) {
}
say() {
console.log(this.name);
}
}
let p:unknown = new Person('wdsa')
p.name // 无法访问
p.say() // 无法执行
- 映射unknown类型,不会映射任何类型
type Mytype<T> = {
[P in keyof T]:any
}
type t5 = Mytype<unknown> // 结果为{}