10. 类型层级

58 阅读1分钟
规则:
1. 字面量类型小于基础类型
type R1 = "abc" extends string ? true : false // true
2. 字面量类型可以赋予给字面量联合类型
let str:"a" | "b" | "c" | "d" = "a"
3. 基础类型可以赋值给包装类型
type condition = string extends String ? true : false // true
4. 包装类型可以赋值给对象类型
type condition = String extends Object ? true : false // true
5. any 和 unknown 类型兼容 Object
type condition = Object extends any ? true : false // true
6. never 是任何类型的子类型
type condition = never extends "a" ? true : false // true

never < 字面量 < 字面量联合类型 | 字面量类型 < 原始数据类型 < 包装类型 < Object < any | unknown
特殊情况:
type condition = any extends String ? true : false // boolean
any 可以分成两部分,条件满足的部分和条件不满足的部分组成,相当于联合类型 true | false

type condition = unknown extends String ? true : false // false
unknown 顶级类型,并且不知道具体是什么类型,所以是 false

type condition = any extends any ? true : false // true
any 和 any 都包含了所有类型
类型层面上,低类型可以赋值给高类型
从结构上,交叉类型可以赋予交叉前的类型,可以理解成基于基础类型做的扩展,相当于子类
type condition = "a" & "b" & "c" & "d"  extends "a" ? true : false // true

type condition = object extends {} ? true : false // true
{} 当作基类,object 看作基类的扩展对象
type condition = Object extends {} ? true : false // true
Object 可以看作在 {} 上扩展的类型

// object 和 Object 之间可以相互赋值
type condition = Object extends object ? true : false // true
type condition = object extends Object ? true : false // true