这里是一个展示问题的沙箱。https://codesandbox.io/s/trusting-moon-n058k?file=/src/index.ts
输入:
任何帮助都将不胜感激,因为我快要疯了。
data.types = {
starter: true,
main: false,
side: false,
dessert: true,
drink: false
}
期望的输出:
recipe.types = ["starter", "dessert"]
解决方案:
type NewRecipeFormValues = {
types: {
starter: boolean,
main: boolean,
side: boolean,
dessert: boolean,
drink: boolean
}
}
const postNewRecipe = (data: NewRecipeFormValues) => {
let recipe = JSON.parse(JSON.stringify(data));
recipe.types = Object.keys(data.types).filter(
(key: keyof NewRecipeFormValues["types"]) => data.types[key]
);
};
问题:
无论我使用什么类型,Typescript都不会停止报错。任何帮助都将不胜感激,因为我快要疯了。
JSON.parse(JSON.stringify(data))
的意义是什么?它会生成data
的部分深度克隆,但你并不需要这样做。 - axiacdata
。至少在问题中发布的代码中不会。但是在let recipe = { ...data }; recipe.types.starter = true;
中,你确实会改变data
。 - axiac