Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.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

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
Javascript Typescript:在接口中的属性之间键入guard_Javascript_Typescript_Typescript Typings - Fatal编程技术网

Javascript Typescript:在接口中的属性之间键入guard

Javascript Typescript:在接口中的属性之间键入guard,javascript,typescript,typescript-typings,Javascript,Typescript,Typescript Typings,在typescript中,我能够声明一个函数类型guard,以检查属性是否为null或与以下类似: 接口IApiResponse{ 只读定义为:布尔型; 只读记录:TRecord |空; } const responseHasRecordDefined= (apiResponse:IApiResponse):apiResponse.record是TRecord=>apiResponse.isDefined; 但是,我想知道是否有一种方法可以只用一个接口定义来完成相同的任务 类似于: 接口IAp

在typescript中,我能够声明一个函数类型guard,以检查属性是否为null或与以下类似:

接口IApiResponse{
只读定义为:布尔型;
只读记录:TRecord |空;
}
const responseHasRecordDefined=
(apiResponse:IApiResponse):apiResponse.record是TRecord=>apiResponse.isDefined;
但是,我想知道是否有一种方法可以只用一个接口定义来完成相同的任务

类似于:

接口IApiResponse{
只读记录:TRecord |空;
已定义只读:此.record为TRecord;
}
编辑:

正如Ryan在评论中指出的,这种初始情况很容易通过空检查处理。因此,我添加了另一个问题示例,它需要某种类型的类型保护,而不是简单的空检查

接口IResponseTypeA{
//这里什么都可以
}
接口IResponseTypeB{
//这里什么都可以
}
接口IapResponse{
只读记录:IResponseTypeA | IResponseTypeB;
只读isTypeA:此.record为IResponseTypeA;
}

我不确定我是否正确理解了这个问题,但你可以这样做

类型IApiResponse={
只读记录:IResponseTypeA;
只读isTypeA:true;
} | {
只读记录:i响应类型b;
只读isTypeA:false;
}
如果你有一个函数,它会根据变量推断出类型

函数foo(条形图:IApiResponse){
if(条形图isTypeA){
///记录不是来自类型IResponseTypeA
}
}

是否有理由检查类型保护中的布尔值,而不是直接检查
记录
字段是否为
null
?例如,这就是您不控制的某些API返回的结果吗?您是正确的,在我给出的示例中,我可以检查
记录
字段是否为
null
。我已经更新了这个问题,加入了一个更为通用的案例,其中两种类型的定义都不太好,比如空检查就可以了。这正是我想要的。。。这是愚蠢的,因为我已经在我的项目中声明了一个奇怪的react组件的道具