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

如何递归转换TypeScript接口/类属性类型?适配GraphQL数据解析优化

实现TypeScript类型转换:将属性转为boolean/递归处理数组元素

可以通过TypeScript的条件类型和递归类型实现你需要的TransformToQueried类型,满足以下规则:

  • 原始类型(字符串、数字、字面量类型等)转为boolean
  • 数组类型转为其元素类型的递归转换结果
  • 对象/接口类型递归处理每个属性

完整类型定义

type TransformToQueried<T> = 
  // 处理数组类型:提取元素类型并递归转换
  T extends Array<infer U> 
    ? TransformToQueried<U>
    : // 处理对象/接口类型:遍历所有属性递归转换
    T extends object
      ? { [K in keyof T]: TransformToQueried<T[K]> }
      : // 原始类型直接转为boolean
      boolean;

验证示例

用你提供的User和Skill接口测试:

interface Skill {
  name: string;
  level: 'beginner' | 'intermediate' | 'advanced';
}

interface User {
  id: number;
  email: string;
  skills: Skill[];
}

// 生成目标类型
type QueriedUser = TransformToQueried<User>;
type QueriedSkill = TransformToQueried<Skill>;

此时QueriedUser的结构完全符合预期:

// 等价于:
interface QueriedUser {
  id: boolean;
  email: boolean;
  skills: QueriedSkill; // 对应Skill[]转换为TransformToQueried<Skill>
}

interface QueriedSkill {
  name: boolean;
  level: boolean;
}

扩展说明

这个类型支持更深层次的嵌套结构,比如如果Skill里还有数组属性,也会被正确处理:

interface Skill {
  name: string;
  level: 'beginner' | 'intermediate' | 'advanced';
  tags: string[];
}

type QueriedSkill = TransformToQueried<Skill>;
// 结果:
// {
//   name: boolean;
//   level: boolean;
//   tags: boolean; // string[] → TransformToQueried<string> → boolean
// }

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 01:35:27