如何在打字稿中使用isArray()?

如何在打字稿中使用isArray()?

问题描述:

我有这个变量名为records,如何在打字稿中使用isArray()?

现在我想检查它的数组或不在angular2/typescript?

在AngularJS我用来做下列的程序:

ng-if="selectedCol.data && !isArray(selectedCol.data)" 

但是当我尝试做以下它不工作;

*ngIf="selectedCol.model.data && !Array.isArray(selectedCol.model.data)" 

它给我下面的错误:

TypeError: Cannot read property 'isArray' of undefined any inputs?

角2模板内Component的背景,意义执行,你可以在里面Component

最简单的方式定义只访问属性/方法是在您的方法中定义isArray方法Component

isArray(obj : any) { 
    return Array.isArray(obj) 
} 

在模板

*ngIf="isArray(selectedCol.model.data)" 

为了避免样板代码,与isArray方法定义服务,注册为单件,注入Component和经由服务属性

备选地使用isArray方法,定义_array属性在您的Component中,并指定Array键入它

private _array = Array; 

在模板

*ngIf="_array.isArray(selectedCol.model.data)" 

除了什么@tchelidze说:

角2提供了名为isArrayfacade/lang出口和确定这样的包装:

export function isArray(obj: any): boolean { 
    return Array.isArray(obj); 
} 

您可以导入它进入你的组件像这样:

import {isArray} from '@angular/facade/lang'; 

然后,你可以在您的组件公开揭露它:

this.isArray = isArray

而在你的模板中使用像这样:

*ng-if="selectedCol.data && !isArray(selectedCol.data)"

虽然不是最有效的解决方案(见其他答案),[].constructor.isArray适用于任何表达上下文,并且不需要使用语言级帮助器污染组件类:

*ngIf="selectedCol.model.data && [].constructor.isArray(selectedCol.model.data)"