JS如何检查对象的属性是否不包含在接口中?

时间:2019-11-20 08:39:28

标签: javascript typescript interface

我有这个界面

export interface IUser {
  name?: string;
  email?: string;
  state?: number;
}

我收到了这个物体

const payload = {
  name: 'name1',
  surename: 'surename1'
};

我需要拒绝这个有效负载,如果它包含IUser接口中未包含的某些属性,例如本例中的surename

1 个答案:

答案 0 :(得分:1)

制作一个允许属性的数组,然后检查.some对象属性之一是否不在该数组中:

const permittedProperties = ['name', 'email', 'state'];

// ...

if (Object.keys(payload).some(key => !permittedProperties.includes(key))) {
  throw new Error('Invalid property found');
}

如果该对象可能还需要验证其内部原型上的属性,则还必须递归地迭代每个原型对象。

如果要验证是否也没有禁止的不可枚举属性,请使用Object.getOwnPropertyNames(检索所有自己的属性)而不是Object.keys(仅检索自己的可枚举属性)。