如何将对象与Typescript中的接口进行比较,以确定对象是否具有正确的变量类型?
所以我在学习Typescript,我想学习如何检查对象是否有正确的值类型 问题:我的API主体如下所示:如何将对象与Typescript中的接口进行比较,以确定对象是否具有正确的变量类型?,typescript,Typescript,所以我在学习Typescript,我想学习如何检查对象是否有正确的值类型 问题:我的API主体如下所示: { id: 123, name: "Jhonny", college: "Stanford", etc.. } 现在我已经创建了接口: export interface CheckData { id: number; name: string; college: string; etc.. } 现在我
{
id: 123,
name: "Jhonny",
college: "Stanford",
etc..
}
现在我已经创建了接口:
export interface CheckData {
id: number;
name: string;
college: string;
etc..
}
现在我想要的是将该对象与该接口进行比较,如果缺少或类型正确,则显示一条消息,尝试实现以下目标:
验证.ts
import {CheckData} from '../interfaces'
export const validateData = (postData: object) => {
//i want to achieve logic like this
if(postData !== CheckData){
console.log(`${whichParamIsntOkay} is not in a valid data type or it's missing`
}
}
postData
从其他文件传递到validateData
。所以我想比较这两个,检查是否都有,是否没有输出postData
中的哪些数据缺失或格式不正确。例如,如果postData
没有id
显示,则id不在有效的数据类型中或缺少。如果id
作为字符串传递,则相同
如何做到这一点?谢谢
编辑:
我也在使用NodeJS+Typescript。接口CheckData
的范围与所有值的范围不同
检查值是否符合CheckData
界面的最安全方法是使用:
导出接口检查数据{
id:编号;
名称:字符串;
学院:弦;
}
常数数据={
id:123,
姓名:“约翰尼”,
学院:“斯坦福”,
};
常量hasProperty=(对象:对象,属性:属性)
:obj是obj&Record=>Object.prototype.hasOwnProperty.call(obj,prop);
const requiredProps=['id','name','college']作为const;
const isCheckData=(obj:unknown):obj是CheckData=>
requiredProps.every((prop):prop是CheckData=>hasProperty(obj,prop))的键;
const validateData=(postData:object)=>{
if(isCheckData(postData)){
const check=postData;//CheckData
}
}
请记住我只检查了钥匙。您可能应该检查obj
的值是否可分配给CheckData
,以使其100%安全
更新
导出接口检查数据{
id:编号;
名称:字符串;
学院:弦;
}
常数数据={
id:123,
姓名:“约翰尼”,
学院:“斯坦福”,
};
常量hasProperty=(对象:对象,属性:属性)
:obj是obj&Record=>Object.prototype.hasOwnProperty.call(obj,prop);
const requiredProps=['id','name','college']作为const;
常量丢失键=(对象:未知)=>
requiredProps.filter((prop)=>!hasProperty(obj,prop));
const result=(postData:object)=>missingKeys(postData)//缺少键的数组
Typescript没有运行时,因此仅使用Typescript的接口是不可能的。但是你可以使用iots
库。@zerkms你能解释一下我如何使用这个库来解决我的问题吗?谢谢因为Typescript可以编译成Javascript,所以您必须用与Javascript相同的方法来完成。谢谢您的回答!我只想检查两个数据,而不是全部,所以这就是我创建接口的原因。我还想知道如何输出缺少变量/类型不正确的部分?我的意思是,我真的不知道如何提取导致错误的变量的名称。请提供一个错误示例。我不清楚您希望得到什么样的输出您可以在示例中看到它,其中包含控制台的一部分。log
我希望得到缺少的变量或数据类型不正确的变量。我进行了更新missingKey
将返回缺失密钥的数组。如果返回空数组,则表示对象具有所有必需的键