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

TypeScript中使用PropertyPath调用Lodash set方法无法更新属性

解决Lodash PropertyPath路径更新不生效的问题

核心排查方向与修复方案

你用数组形式的['epic', 'reprint', 'enabled']作为PropertyPath是符合Lodash规范的,问题大概率出在以下几个环节:

  • 确认目标配置对象是否正确
    你的setConfig函数必须确保传入Lodash set方法的第一个参数是gaming服务对应的配置对象,而非整个全局配置集合。比如如果你的全局配置结构是:

    const globalConfigs = {
      gaming: {
        epic: { reprint: { enabled: false } }
      }
    };
    

    那setConfig里必须先拿到globalConfigs.gaming再调用_.set,而不是直接传globalConfigs。

  • 检查set方法的调用参数顺序
    Lodash set的语法是_.set(targetObject, path, value),务必确认你的函数里参数顺序没有搞反——比如不要写成_.set(path, targetObject, value),这是最容易犯的低级错误。

  • 验证配置对象的可修改性
    如果目标配置对象被Object.freeze()或者设置为只读,Lodash的set方法会静默失败,不会抛出错误。可以在调用set前后打印对象,确认是否有修改权限。

正确的代码实现示例

import _ from 'lodash';

// 复用你提到的类型定义
type PropertyName = string | number | symbol;
type Many<T> = T | T[];
type PropertyPath = Many<PropertyName>;

// 模拟你的配置结构
const serviceConfigs = {
  gaming: {
    epic: {
      reprint: {
        enabled: false
      }
    }
  }
};

function setConfig(service: string, path: PropertyPath, value: unknown) {
  // 先定位到目标服务的配置
  const targetConfig = serviceConfigs[service];
  if (!targetConfig) {
    console.error(`找不到服务${service}的配置`);
    return;
  }
  // 正确调用Lodash set方法
  _.set(targetConfig, path, value);
}

// 调用测试
setConfig('gaming', ['epic', 'reprint', 'enabled'], true);
console.log(serviceConfigs.gaming.epic.reprint.enabled); // 输出true

额外排查点

  1. 确认调用setConfig时传入的service参数是准确的'gaming',没有拼写错误(比如写成'game')。
  2. 如果是TypeScript项目,确保自定义的PropertyPath类型和Lodash官方的PropertyPath类型完全兼容——可以直接导入Lodash的类型import type { PropertyPath } from 'lodash',避免自定义类型导致的隐性问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 17:48:10