Typescript 递归地更改对象的所有键

Typescript 递归地更改对象的所有键,typescript,object,recursion,Typescript,Object,Recursion,我想根据字典更改对象的所有键,例如: const result: Object = { "_id": "010973", "local": { "prod": { "unit": 1, "vol": 1174.5, }, "pack": {

我想根据字典更改对象的所有键,例如:

const result: Object = {
    "_id": "010973",
    "local": {
        "prod": {
            "unit": 1,
            "vol": 1174.5,
        }, "pack": {
            "vol": 16226,
        }
    }, "catalogue": {
        "thumb": "http://www.apimages.com/Images/Ap_Creative_Stock_Header.jpg",
    }
};

const dict: Object = {
    '_id': 'Product number',
    'local.prod' : 'Product information',
    'local.prod.vol': 'Product vol (cm3)',
    'local.prod.unit': 'Product unit (qty)',
    'local.pack.vol': 'Package vol (cm3)',
    'catalogue.thumb': 'Image URL'
};
我希望最终结果是这样的

{
    "Product number": "010973",
    "local": {
        "Product information": {
            "Product unit (qty)": 1,
            "Product vol (cm3)": 1174.5,
        }, "pack": {
            "Package vol (cm3)": 16226,
        }
    }, "catalogue": {
        "Image URL": "http://www.apimages.com/Images/Ap_Creative_Stock_Header.jpg",
    }
};
现在我有

const changeKeys = (obj: Object, dictionary: Object): void => {
    Object.keys(obj).forEach(key => {
        obj[dictionary[key]] = obj[key]
    })

};
changeKeys(result, dict);

这只会更改第一层,因此_id将成为产品编号。我想我只需要对结果对象进行某种递归,但我似乎无法使其工作,并且在密钥无法转换时进行一些错误处理。

我可以建议您使用lodash,而无需重新发明轮子。它有很多对现代应用有用的功能

import * as _ from "lodash";
    
for(const key of Object.keys(dict)){
  if(_.get(result, key) != undefined){
    _.set(result, key, dict[key]);
  }
}
console.log(result);