我一直在尝试改进一个老项目的类型,每当事情变得复杂时,它就会使用大量的“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]
}
});
1条答案
按热度按时间gev0vcfq1#
const nestedKey: keyof typeof data = 'car';
keyof typeof data
将返回以下文本类型:'car' | 'cat' | 'random' | 'why'
个你可以像这样吃:
localData[key] = data[nestedKey][key]