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

如何从TypeScript联合类型中过滤含非指定键的对象?

过滤联合类型中仅含指定键的成员

给定联合类型:

type Test = { name: "a" } | { name: "b" } | { name: "c", other: 1 } | { name: "d", other: 2 }

需要过滤掉所有包含name以外其他键的类型,最终得到{ name: "a" } | { name: "b" }。

解决方案

可以通过TypeScript条件类型结合键操作实现:

type OnlyHasName<T> = T extends { name: infer N } 
  ? (Exclude<keyof T, "name"> extends never ? { name: N } : never) 
  : never;

// 应用到Test类型
type FilteredTest = OnlyHasName<Test>; // 类型为 { name: "a" } | { name: "b" }

原理说明

  1. 遍历联合成员:条件类型T extends { name: infer N }会自动遍历联合类型的每个成员,提取name字段的类型到N;
  2. 判断键的唯一性:Exclude<keyof T, "name"> extends never用于检查当前类型T是否仅包含name这一个键——如果排除name后没有剩余键,说明符合要求;
  3. 保留或排除:符合条件的类型保留为{ name: N },不符合的返回never,而never在联合类型中会被自动忽略。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 10:48:20