Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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,Angular的$http.defaults.transformRequest定义为: transformRequest?: IHttpRequestTransformer |IHttpRequestTransformer[]; 现在我想附加一个自己的转换器,所以我需要检查这是否已经是一个数组。我想一个简单的带 function x(): angular.IHttpRequestTransformer[] { if($http.defaults.transformRequest in

Angular的
$http.defaults.transformRequest
定义为:

transformRequest?: IHttpRequestTransformer |IHttpRequestTransformer[];
现在我想附加一个自己的转换器,所以我需要检查这是否已经是一个数组。我想一个简单的带

function x(): angular.IHttpRequestTransformer[] { 
    if($http.defaults.transformRequest instanceof Array){
       return $http.defaults.transformRequest;
    }
}
但是,在if子句中,idea仍然认为它是一种联合类型。我还尝试了
instanceof
$http.defaults.transformRequest.length==undefined
,但没有任何效果

有没有人能给我一个正确的提示,告诉我如何告诉IDEA我已经确保了
$http.defaults.transformRequest
是一个数组


谢谢!

类型保护不适用于TypeScript<2.0中的属性。它们只处理变量和参数

您需要将其放入一个变量中,然后键入guard,以便

let transformRequest = $http.defaults.transformRequest;
if (transformRequest instanceof Array) {
    return transformRequest;
}
只需使用类型断言:

if ($http.defaults.transformRequest instanceof Array) {
    return $http.defaults.transformRequest as IHttpRequestTransformer[];
}

InterfaceType的transformRequest instanceof抛出的“InterfaceType”仅引用类型,但在此处用作值。[2693]@Iohiarahul在运行时无法在TypeScript中使用接口。阅读更多。