2016-08-01 119 views
0

我想將以下內容轉換爲工作模式,但我認爲這是一個Es5/ES6問題。幫助讚賞。ES5 vs ES6 Javascript for Arrays

this.rows = Array.from(Array(Math.ceil(this.subCategoryModels.length/3)).keys()); 

我目前得到typscript錯誤:

[ts] 
Property 'from' does not exist on type 'ArrayConstructor'. 
any 

[ts] 
Property 'keys' does not exist on type 'any[]'. 
any 
+2

也許https://github.com/Microsoft/TypeScript/issues/8174相關 – Dylan

+1

* 「我認爲這是一個ES5/ES6問題」 * - 您是否嘗試寫ES5或ES6? 'Array.from()'和'.keys()'都是ES6方法,顯然它們在ES5中不起作用。 – nnnnnn

+1

嘗試插入'新'如:「Array.from(new Array(Math ...」),看看是否有幫助 – etchesketch

回答

0

既然你看到這些錯誤,我假設你的源文件ES5。您可以使用typings使Typescript識別陣列的es2015函數。

首先,安裝typings(如果尚未安裝)。

npm install typings --global

一旦你安裝了分型,安裝ES2015陣列功能型類型定義。

typings install -SG env~es2015-array

如果你的目標是不支持新的磁盤陣列功能的瀏覽器,你還需要添加填充工具。

0

最後我做了以下內容:

HTML

<ion-row *ngFor="let trio of getTriples()"> 
    <ion-col *ngFor="let item of trio" (click)="itemTapped(item)"> 
     <div class="row responsive-md"> 
     <div id="icon-image-{{item.id}}"><img src="data:image/png;base64,{{item.icon}}" height="75" width="75" /></div> 
     <p>{{item.name}}</p> 
     </div> 
    </ion-col> 
    </ion-row> 

打字稿

getTriples() { 
    let triples = []; 
    let length = this.subCategoryModels.length; 
    for (let i = 0; i < length; i += 3) { 
     let trio = []; 
     trio.push(this.subCategoryModels[i]); 
     if (i + 1 < length) { 
     trio.push(this.subCategoryModels[i + 1]); 
     } 
     if (i + 2 < length) { 
     trio.push(this.subCategoryModels[i + 2]); 
     } 
     triples.push(trio); 
    } 
    return triples; 
    }