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

如何定义TypeScript类型Parts<T>为符合指定约束的二元元组?

定义满足特定条件的TypeScript类型Parts<T>

需要定义TypeScript类型Parts<T>,使其代表一个二元元组[A, B],且必须满足三个约束:

  • T extends A(T是A的子类型)
  • T extends B(T是B的子类型)
  • A & B extends T(A和B的交集是T的子类型)

我的尝试代码无法达到预期效果:

type Parts<T> = T extends infer A
  ? T extends infer B
    ? A & B extends T
      ? [A, B]
      : never
    : never
  : never
type T = { a: 1; b: 2 }
type PT = Parts<T>

// 预期应该通过类型检查的案例
const should_be_ok_1: PT = [{ a: 1 }, { b: 2 }]
const should_be_ok_2: PT = [{ b: 2 }, { a: 1 }]
const should_be_ok_3: PT = [{ a: 1, b: 2 }, {}]
const should_be_ok_4: PT = [{ a: 1, b: 2 }, { a: 1 }]

// 预期应该报错的案例
const should_be_ko_1: PT = [{ a: false }, { b: 2 }]
const should_be_ko_2: PT = [{ a: 1 }, { b: false }]
const should_be_ko_3: PT = [{ a: 1 }, { c: 2 }]

当前实现得到的Parts<T>实际是[T, T],导致除了should_be_ok_3和should_be_ok_4的第一个元素外,所有符合预期的元组都会被编译器报错——因为这些元素不是完整的T类型,但实际上它们应该符合约束条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 02:17:03