我有这个界面
export interface IUser {
name?: string;
email?: string;
state?: number;
}
我收到了这个对象
const payload = {
name: 'name1',
surename: 'surename1'
};
我需要的是拒绝这个有效负载,如果它包含一些未包含在 IUser 接口(interface)中的属性,如本例中的surename
最佳答案
创建一个允许属性的数组,然后检查.some
对象属性之一是否不在数组中:
const permittedProperties = ['name', 'email', 'state'];
// ...
if (Object.keys(payload).some(key => !permittedProperties.includes(key))) {
throw new Error('Invalid property found');
}
如果您还想验证该对象的内部原型(prototype)上的属性,则还必须递归地迭代每个原型(prototype)对象。
如果您想验证不存在禁止的不可枚举属性,请使用 Object.getOwnPropertyNames
(它检索所有自己的属性)而不是 Object.keys
(它仅检索自己的可枚举属性)。
关于javascript - JS 如何检查对象是否具有接口(interface)中未包含的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58949968/