如何使用类型保护解决打字稿联合类型的接口

时间:2015-11-19 20:02:11

标签: typescript

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

transformRequest?: IHttpRequestTransformer |IHttpRequestTransformer[];

现在我想附加一个自己的变换器,所以我需要检查这是否已经是一个数组。我认为一个简单的打字机

function x(): angular.IHttpRequestTransformer[] { 
    if($http.defaults.transformRequest instanceof Array){
       return $http.defaults.transformRequest;
    }
}
然而,

会起作用,在if子句中仍然认为它是一个联合类型。我还尝试了instanceof$http.defaults.transformRequest.length === undefined,没有任何效果。

任何人都可以向我暗示我如何告诉IDEA我已经确保$http.defaults.transformRequest是一个阵列吗?

感谢!

1 个答案:

答案 0 :(得分:2)

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

你需要把它放在一个变量中并键入后卫...

let transformRequest = $http.defaults.transformRequest;
if (transformRequest instanceof Array) {
    return transformRequest;
}

... 只使用类型断言:

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