规则:
1. 字面量类型小于基础类型
type R1 = "abc" extends string ? true : false
2. 字面量类型可以赋予给字面量联合类型
let str:"a" | "b" | "c" | "d" = "a"
3. 基础类型可以赋值给包装类型
type condition = string extends String ? true : false
4. 包装类型可以赋值给对象类型
type condition = String extends Object ? true : false
5. any 和 unknown 类型兼容 Object
type condition = Object extends any ? true : false
6. never 是任何类型的子类型
type condition = never extends "a" ? true : false
never < 字面量 < 字面量联合类型 | 字面量类型 < 原始数据类型 < 包装类型 < Object < any | unknown
特殊情况:
type condition = any extends String ? true : false
any 可以分成两部分,条件满足的部分和条件不满足的部分组成,相当于联合类型 true | false
type condition = unknown extends String ? true : false
unknown 顶级类型,并且不知道具体是什么类型,所以是 false
type condition = any extends any ? true : false
any 和 any 都包含了所有类型
类型层面上,低类型可以赋值给高类型
从结构上,交叉类型可以赋予交叉前的类型,可以理解成基于基础类型做的扩展,相当于子类
type condition = "a" & "b" & "c" & "d" extends "a" ? true : false
type condition = object extends {} ? true : false
{} 当作基类,object 看作基类的扩展对象
type condition = Object extends {} ? true : false
Object 可以看作在 {} 上扩展的类型
type condition = Object extends object ? true : false
type condition = object extends Object ? true : false