Typescript语法笔记

发布于 2025-08-01  647 次阅读


深拷贝示例

// 增强版深拷贝 (支持Set/循环引用)
export const enhancedDeepClone = (obj, cache = new WeakMap()) => {
  // 基础类型直接返回
  if (obj === null || typeof obj !== 'object') return obj;
  
  // 循环引用检测
  if (cache.has(obj)) return cache.get(obj);
  
  // 特殊对象处理
  const constructor = obj.constructor;
  let clone;
  
  switch (constructor) {
    case Date: 
      clone = new Date(obj);
      break;
    case Map:
      clone = new Map(Array.from(obj, ([k, v]) => [k, enhancedDeepClone(v, cache)]));
      break;
    case Set:
      clone = new Set(Array.from(obj, v => enhancedDeepClone(v, cache)));
      break;
    case RegExp:
      clone = new RegExp(obj);
      break;
    default:
      clone = Array.isArray(obj) ? [] : Object.create(Object.getPrototypeOf(obj));
  }
  
  // 缓存当前对象防止循环引用
  cache.set(obj, clone);
  
  // 递归拷贝属性
  Reflect.ownKeys(obj).forEach(key => {
    clone[key] = enhancedDeepClone(obj[key], cache);
  });
  
  return clone;
};

// 增强版空值过滤 (可配置)
export const flexibleFilter = (obj, options = {}) => {
  const {
    filterNull = true,
    filterUndefined = true,
    filterEmptyString = true
  } = options;
  
  return Object.fromEntries(
    Object.entries(obj).filter(([_, v]) => {
      if (filterNull && v === null) return false;
      if (filterUndefined && v === undefined) return false;
      if (filterEmptyString && v === '') return false;
      return true;
    })
  );
};
  • object 类型包含:​​数组、函数、类、对象字面量、Date 等​​(需结构化数据)。
  • ​非 object 类型​​ = 基本类型(stringnumber, 等) + 特殊类型(anyvoid, 等) + 字面量类型。
届ける言葉を今は育ててる
最后更新于 2025-08-01