You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中Pick<A & B, keyof A | keyof B>和A & B的区别是什么?

问题原因解析

1. 双向extends返回true的原因

TypeScript的extends默认执行结构子类型兼容性检查,仅校验两个类型的公开属性结构是否匹配,不关心类型的构造来源:

  • 交叉类型A & B的属性集合本身就是keyof A | keyof B(也就是'a' | 'b' | 'c'),其中b属性是string & number计算得到的never类型
  • Pick<A & B, keyof A | keyof B>的作用就是从交叉类型中提取所有属性,生成的新对象类型和A & B的属性结构完全一致
    因此双向的结构兼容性检查都会通过,返回true。

2. Equal返回false的原因

你用到的这个Equal是TS社区通用的严格类型同一性判断工具,它的实现依赖TS编译器内部的类型同一性校验规则,除了结构之外还会校验类型的原始构造形式:

  • A & B在TS类型系统内部属于「交叉类型」,是TS原生的复合类型
  • Pick是映射类型工具,生成的结果属于「普通对象类型」
    二者虽然结构完全一致,但在TS内部的类型节点分类完全不同,严格同一性判断自然会返回false。

核心区别

  • extends判断:仅校验属性结构兼容性,只要结构匹配就判定为相等
  • 该Equal判断:校验类型在TS内部的完整表示,要求结构、构造来源完全一致才判定为相等

内容的提问来源于stack exchange,提问作者phill zou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 09:12:02