unknown 类型
let value: unknown
value = 1
value = '32'
- 2.如果没有类型断言或者基于控制流的类型细化, 那么不能将 unknown 类型赋值给其他类型
let value1: unknown = 123
let value2: number
// value2 = value1 as number
if (typeof value1 === 'number') {
value2 = value1
}
- 3.如果没有类型断言或者基于控制流的类型细化, 那么不能在 unknown类型进行任何操作
let value3: unknown = 123
// value3++ // Object is of type 'unknown'.
let res = (value3 as number) + 1
- 4.只能对 unknown 类型 进行 相等或不等操作, 不能进行其他操作
let value4: unknown = 123
let value44: unknown = 123
console.log(value4 === value44)
- 5.unknown 与其他任何类型组成的交叉类型最后都是其他类型
type MyType = number & unknown
type MyType1 = unknown & string
- 6.unknown 除了any以外 , 与其他任何类型组成的联合类型最后都是 unknown 类型
type MyType2 = unknown | number
type MyType3 = unknown | number | boolean
type MyType4 = never extends unknown ? true : false
type MyType5 = keyof unknown
- 9.unknown 类型的值不能访问其属性, 方法, 创建实例
class Person {
name: string = 'css'
say(): void {
console.log(`name = ${this.name}`)
}
}
let p: unknown = new Person()
// p.say()
console.log('p', p)
- 10.使用映射类型时, 如果遍历的是 unknown 类型, 那么 不会映射任何属性
type MyType6<T> = {
[p in keyof T]: any
}
// 不会映射任何属性
type MyType7 = MyType6<unknown>
网友评论