ts 如何判断对象的Key是否在interface中有定义

interface IUser {
  cname: string;
  age: number;
}

const obj = {
  cname: 'xxx',
  age: 18
}

如何判断上面的obj是否完全符合interface?

需求是:
因为obj是用户提交,内容不可控,想要把obj中仅在IUser里有定义的字段提取出来,这个这么实现?

阅读 9.4k
2 个回答

typescript是静态类型系统,运行时就是JavaScript没有类型检测。只能在代码中嵌入硬编码,

Object.keys(obj).filter(key => ['cname', 'age'].indexOf(key) > -1)

然后之类之类的

或者你换个思路,用户不也能直接请求接口发送一个自定义的结构吗,所以不用太纠结

可以借助 joi 去做对象验证操作,提取的话,只能自己手动提取了,验证的example

const Joi = require('joi');

const userSchema = Joi.object({
    cname: Joi.string().required(),
    age: Joi.number().required()
})

userSchema.validate({ cname: 'abc', age: 21 });
// -> { value: { cname: 'abc', age: 21 } }

userSchema.validate({});
// -> { value: {}, error: '"cname" is required. "age" is required' }

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题