Javascript Typescript拒绝不符合接口的属性
我有一个API控制器,它接受这样一个body参数Javascript Typescript拒绝不符合接口的属性,javascript,typescript,Javascript,Typescript,我有一个API控制器,它接受这样一个body参数 insertUser(@Body() user: IUser) {} 但是问题是,我可以发布一个对象,该对象包含的属性比IUser定义的属性更多 要确保用户严格遵守类型,或者只保留界面IUser``中定义的类型,最简单、最干净的方法是什么?我的答案与框架无关。您询问如何强制TS不允许传递具有附加字段的类型的值,这意味着我们希望具有该类型的独占行为,您具有相同的属性,或者您不被允许 首先,这样的行为在类型级别是没有好处的,因为如果给定的值有我们需
insertUser(@Body() user: IUser) {}
但是问题是,我可以发布一个对象,该对象包含的属性比IUser
定义的属性更多
要确保
用户
严格遵守类型,或者只保留界面IUser``中定义的类型,最简单、最干净的方法是什么?我的答案与框架无关。您询问如何强制TS不允许传递具有附加字段的类型的值,这意味着我们希望具有该类型的独占行为,您具有相同的属性,或者您不被允许
首先,这样的行为在类型级别是没有好处的,因为如果给定的值有我们需要的字段,那么其他字段对我们来说就不重要了。另一件事是,即使我们可以对类型进行编译时检查,如果您的数据来自API,那么您需要在运行时级别进行验证
首先,类型级别的独占类型行为实现:
类型IUser={
名称:字符串;
lastname:string;
}
//用于强制使用exlusive类型的实用程序类型
仅键入现有字段={
假装的,假装的,假装的,假装的
}
//具有更多字段的示例类型
类型IMoreUser=IUser&{
年龄:人数;
}
//正确类型的实例
常数u1:IUser={
姓氏:“”,
名称:“”
}
//具有更多字段的类型的实例
常量u2:IMoreUser={
姓氏:“”,
名称:“”,
年龄:12
}
//exlusive函数的下面类型声明
声明函数插入器(用户:U):无效
//用法:
insertUser(u1)//您使用什么API框架?您想在API端还是在API用户端执行强制?Nestjs,但我想要一个不依赖于框架的解决方案。对于API来说,框架本身与如何处理它有很大关系。使用nestjs,您可能会执行拦截器。请记住,JavaScript是一种duck类型的语言,为了匹配属性,您必须匹配它们。我知道大多数JavaScript代码只希望基于您关心的属性应用逻辑,而忽略其他属性。