如何使用类型保护解析接口的typescript联合类型
Angular的如何使用类型保护解析接口的typescript联合类型,typescript,Typescript,Angular的$http.defaults.transformRequest定义为: transformRequest?: IHttpRequestTransformer |IHttpRequestTransformer[]; 现在我想附加一个自己的转换器,所以我需要检查这是否已经是一个数组。我想一个简单的带 function x(): angular.IHttpRequestTransformer[] { if($http.defaults.transformRequest in
$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中使用接口。阅读更多。