用途:把 TypeScript 类型视为「可能值的集合」,可赋值性即子集关系,从而直观理解联合、交叉、extends、never 与 unknown。适用于被联合或交叉类型绕晕、觉得 extends 反直觉、或调试「not assignable to」错误时。
主要能力:给出 TypeScript 与集合论的对应关系——never 是空集,字面量类型是单元素集,T1 | T2 是并集,T1 & T2 是交集,unknown 是全集,extends 与「assignable to」都是子集(⊆)。核心规则:看到 extends 或 assignable to 就想「子集」。
关键澄清:交叉 & 作用于值的集合而非属性,因此结果集合更小、但每个值要求的属性更多,例如 Person & Lifespan 同时具备两组属性;联合 | 的集合更大,但只能保证公共属性,如 keyof (Person | Lifespan) 为 never。extends 表示子集而非类继承,泛型约束 K extends string 即 K 是 string 的任意子集。never 为空集,可用于穷尽性检查;unknown 为全集,但使用前需先收窄。数组与元组示例说明 number[] 不是 [number, number] 的子集。
使用方式:作为推理与排错时的思维工具,在阅读类型、写泛型约束与条件类型(如 T extends string ? true : false)时套用集合视角。
限制:资料未提供安装命令、平台支持、收费或价格信息;内容基于《Effective TypeScript》第 7 条,属概念性指导,不含可直接运行的完整工具链。