json 类型脚本嵌套动态属性

vbopmzt1  于 2022-12-15  发布在  其他
关注(0)|答案(1)|浏览(157)

我一直在尝试改进一个老项目的类型,每当事情变得复杂时,它就会使用大量的“any”。
考虑下面的不规则数据结构,其中Data是与示例匹配的接口(有些是嵌套对象,有些不是。我在所有页面上使用相同的Map函数,这取决于localData中显示的内容):

const data: Data = {
   car: { name: 'x', speed: 45},
   cat: { fur: true },
   random: ['hi', 'bye']
   why: "because"
};

现在,我将这些数据Map到不同的页面上,如下所示

const nestedKey = 'car';
const localData = {
   name: '',
   speed: 0
};

Object.keys(localData).forEach(key => {
   if (nestedKey && data[nestedKey]) {
      // Here I'm not too sure what type to give key to make TS happy
      localData[key] = data[nestedKey as keyof Data][key]
   } else {
      localData[key] = data[key as keyof Data]
   }
});
gev0vcfq

gev0vcfq1#

const nestedKey: keyof typeof data = 'car';
keyof typeof data将返回以下文本类型:
'car' | 'cat' | 'random' | 'why'
你可以像这样吃:
localData[key] = data[nestedKey][key]

相关问题