用方括号更新对象时,TypeScript指示.ts(7053)错误

用方括号更新对象时,TypeScript指示.ts(7053)错误,typescript,typescript-typings,Typescript,Typescript Typings,我想用方括号更新一个对象,之前我想检查是否允许更新 这是我的密码: const updates = Object.keys(req.body); const allowedUpdates = ['phone', 'email', 'company', 'metadata']; const user = USERS.find((user) => userId === user.id); updates.forEach((update) => user[update] = req.bod

我想用方括号更新一个对象,之前我想检查是否允许更新

这是我的密码:

const updates = Object.keys(req.body);
const allowedUpdates = ['phone', 'email', 'company', 'metadata'];
const user = USERS.find((user) => userId === user.id);
updates.forEach((update) => user[update] = req.body[update]);
用户类别:

导出类用户{
构造函数(public id:string,public firstName:string,public lastName:string,
公用电话:字符串,公用电子邮件:字符串,公用公司:字符串,元数据?:对象){
};
}
然后发生以下错误:

元素隐式具有“any”类型,因为表达式的类型为 “字符串”不能用于索引类型“用户”。没有带有 在类型“User”.ts(7053)上找到了类型为“string”的参数


我该如何处理它?

您想进行一些积极的类型转换,并修复代码的一些逻辑:

导出类用户{
//这是填料
公共id:number=1;
//你忘了在元数据前面放一个public
构造函数(public firstName:string,public lastName:string,
公用电话:字符串,公用电子邮件:字符串,公用公司:字符串,公用元数据?:对象){
};
}
//这三条线也是填充线
const用户:User[]=[];
const req={body:{phone:“asdf”,firstName:“foo”}as object};
const userId=1;
const updates=对象键(请求主体);
//使用一套,因为它更快
const allowedUpdates:Set=newset(['phone'、'email'、'company'、'metadata']);
const user=USERS.find((user)=>userId==user.id);
//确保实际过滤更新
//在这一点上,您可以确保每个元素都在用户的keyof中
const filteredUpdates:(keyof User)[]=updates.filter((update)=>allowedUpdates.has(update))作为(keyof User)[];
//如果找不到任何用户,则用户可能未定义,因此我们需要对此进行检查
如果(用户){
过滤重复数据
//您可能不需要在此处强制转换“as keyof typeof req.body”
.forEach((更新)=>user[update]=req.body[update as keyof typeof req.body]);
}

请发送您的
用户
类。@Aplet123当然,我忘了。完成。:)哇,谢谢你!让我理解一下,我会分析你的代码:)它几乎可以工作。现在我有以下错误:类型“any”不可分配给类型“never”。ts(2322)与前面的位置相同。有趣的是:当我删除用户类下元数据旁边的“public”关键字时,一切都正常了。