You need to enable JavaScript to run this app. TypeScript中是否存在代表任意可迭代对象的类型?
优惠活动
大模型
产品
解决方案
定价
更多

TypeScript中是否存在代表任意可迭代对象的类型?

问题解答

1. TypeScript对应可遍历/可迭代类型说明

你需要的表示所有可迭代类型的内置类型是Iterable<T>,它匹配所有实现了Symbol.iterator接口的类型,包括数组、Set、Map、字符串、生成器等所有可以用for...of遍历的类型。
如果你是要匹配普通键值对对象+数组,也就是你当前代码里实际处理的两种类型,可以自己定义一个联合类型,也可以用泛型约束实现更严格的类型校验。

2. 补充类型后的完整函数代码

你提供的函数补全类型后可写成如下形式,既保证类型安全,也保留原逻辑的功能:

// 递归类型:自动把对象/数组中所有undefined类型替换为null
type UndefinedToNull<T> = T extends undefined 
  ? null 
  : T extends (infer U)[] 
    ? UndefinedToNull<U>[] 
    : T extends object 
      ? { [K in keyof T]: UndefinedToNull<T[K]> }
      : T;

export const objectUndefinedToNull = <T extends object>(obj: T): UndefinedToNull<T> => {
  const apply = (o: object) => {
    Object.keys(o).forEach((key) => {
      const record = o as Record<string, unknown>
      const value = record[key];
      if (value === undefined) {
        record[key] = null;
      }
      if ((value instanceof Array || value instanceof Object) && value !== null) {
        apply(value);
      }
    });
  };
  apply(obj);
  return obj as UndefinedToNull<T>;
};

3. 代码说明

  • 用泛型T extends object约束入参必须是对象/数组,避免传入基础类型出现非预期错误
  • 自定义的UndefinedToNull递归类型可以自动推导返回值类型,调用函数后拿到的返回值会自动把所有定义为undefined的位置替换为null类型,不需要手动做类型断言
  • 原逻辑中的value || {}会把null值转为空对象做多余处理,因此补充了value !== null的判断,逻辑更严谨。

内容的提问来源于stack exchange,提问作者The.Wolfgang.Grimmer

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 18:15:09