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

TypeScript:从剩余参数的泛型联合类型中获取单个类型

解决TypeScript剩余参数保留单个元素类型推断的问题

要让剩余参数的每个元素保留各自的SomeClass<具体Union成员>类型,需要用元组泛型+映射类型来约束函数参数,而非简单的数组泛型。

修改后的函数定义

type SomeUnion = "first" | "second" | "third"

class SomeClass<TypeFromUnion extends SomeUnion>{}

// 核心修改:用元组泛型T,映射出每个位置的具体类型
function someFn<T extends SomeUnion[]>(...rest: { [K in keyof T]: SomeClass<T[K]> }) {}

调用效果验证

调用时每个参数的类型都会被精准推断:

// rest[0] 类型为 SomeClass<"first">
someFn(new SomeClass<"first">())

// rest[0] → SomeClass<"third">,rest[1] → SomeClass<"second">
someFn(new SomeClass<"third">(), new SomeClass<"second">())

// rest[0] → SomeClass<"third">,rest[1] → SomeClass<"first">,rest[2] → SomeClass<"second">
someFn(new SomeClass<"third">(), new SomeClass<"first">(), new SomeClass<"second">())

原理说明

  • 泛型T会被推断为传入参数对应的元组(比如第二个调用中T是["third", "second"])
  • 映射类型{ [K in keyof T]: SomeClass<T[K]> }遍历元组的每个位置,将每个元素类型对应为SomeClass<元组对应位置的Union成员>,从而保留单个参数的原始类型,避免被合并为联合类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 07:01:02