如何定义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
相关产品推荐
相关产品推荐

