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

能否从现有TypeScript接口中移除不含get属性的顶层属性?

TypeScript 接口过滤:移除不含get属性的顶层字段

给定以下TypeScript接口:

interface Example {
  '/api/good/path': {
    get: Record<string, unknown>;
    parameters: Record<string, unknown>;
  };
  '/api/alsogood/path': {
    get: Record<string, unknown>;
  };
  '/api/bad/path': {
    post: Record<string, unknown>;
  };
  '/api/technicallygood/path': {
    get: Record<string, unknown>;
    post: Record<string, unknown>;
  };
}

需求是基于该接口创建新接口,移除所有嵌套对象不包含get属性的顶层属性——也就是保留那些嵌套对象至少包含一个get属性的字段,比如移除'/api/bad/path',保留其余字段。

解决方案

可以通过TypeScript的映射类型和条件类型实现这个过滤逻辑:

// 定义工具类型:过滤出值包含get属性的键
type FilterPathsWithGet<T> = {
  [K in keyof T as T[K] extends { get: unknown } ? K : never]: T[K];
};

// 创建过滤后的接口
type FilteredExample = FilterPathsWithGet<Example>;

逻辑说明

  • 映射类型[K in keyof T]遍历原接口的所有顶层键;
  • 条件类型T[K] extends { get: unknown } ? K : never判断当前键对应的值是否包含get属性(unknown表示不限制get的具体类型),满足条件则保留键,否则用never排除该键;
  • 最终FilteredExample的结构完全符合需求:
// FilteredExample 等效于:
interface FilteredExample {
  '/api/good/path': {
    get: Record<string, unknown>;
    parameters: Record<string, unknown>;
  };
  '/api/alsogood/path': {
    get: Record<string, unknown>;
  };
  '/api/technicallygood/path': {
    get: Record<string, unknown>;
    post: Record<string, unknown>;
  };
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:17:17