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

如何在TypeScript嵌套对象键路径中排除Date原生属性

解决TypeScript生成对象嵌套键路径时排除Date原生成员的问题

要实现只保留Date属性本身、排除其原生方法和属性的嵌套键路径生成,可以通过自定义TypeScript类型工具来过滤Date类型的递归遍历。

核心类型实现

// 判断是否为Date类型
type IsDate<T> = T extends Date ? true : false;

// 生成嵌套键路径的核心类型
type NestedKeyPaths<T> = T extends object
  ? IsDate<T> extends true
    ? never // 遇到Date类型,停止递归,不展开其原生成员
    : {
        [K in keyof T]: K extends string | number
          ? `${K}` | `${K}.${NestedKeyPaths<T[K]>}`
          : never;
      }[keyof T]
  : never;

代码说明

  • IsDate<T>:通过类型条件判断传入的类型是否为Date,用于后续终止递归。
  • NestedKeyPaths<T>:
    1. 首先判断当前类型是否为对象;
    2. 如果是Date类型,返回never,表示不再展开该属性的成员;
    3. 对于普通对象,遍历其所有键,递归生成当前键与子键路径的拼接字符串;
    4. 最终通过[keyof T]提取所有可能的键路径联合类型。

使用示例

// 测试用的对象类型
type TestObj = {
  id: number;
  info: {
    name: string;
    createTime: Date;
    meta: {
      updateTime: Date;
      version: string;
    };
  };
};

// 获取纯净的嵌套键路径
type Paths = NestedKeyPaths<TestObj>;
// Paths的结果为:
// "id" | "info" | "info.name" | "info.createTime" | "info.meta" | "info.meta.updateTime" | "info.meta.version"

可以看到,createTime和updateTime作为Date类型属性,只会保留自身的键路径,不会展开toString、toLocaleString等原生方法。

如果需要生成运行时的键路径数组,可以基于上述类型编写对应的函数,利用类型约束确保生成的路径符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 20:49:51