Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将对象与Typescript中的接口进行比较,以确定对象是否具有正确的变量类型?_Typescript - Fatal编程技术网

如何将对象与Typescript中的接口进行比较,以确定对象是否具有正确的变量类型?

如何将对象与Typescript中的接口进行比较,以确定对象是否具有正确的变量类型?,typescript,Typescript,所以我在学习Typescript,我想学习如何检查对象是否有正确的值类型 问题:我的API主体如下所示: { id: 123, name: "Jhonny", college: "Stanford", etc.. } 现在我已经创建了接口: export interface CheckData { id: number; name: string; college: string; etc.. } 现在我

所以我在学习Typescript,我想学习如何检查对象是否有正确的值类型

问题:我的API主体如下所示:

{
   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
将返回缺失密钥的数组。如果返回空数组,则表示对象具有所有必需的键