简体   繁体   中英

ES5 vs ES6 Javascript for Arrays

I am trying to convert the following to work, but I think it is an Es5/ES6 issue. Help Appreciated.

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

I currently get typscript errors:

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

and

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

Property 'from' does not exist on type 'ArrayConstructor'.

This points to the fact that you want to use ES6 type definitions while still compiling to ES5.

Recommend the lib option in TypeScript latest:

"compilerOptions": {
    "target": "es5",
    "lib": ["es6", "dom"]
}

More

https://basarat.gitbooks.io/typescript/content/docs/types/lib.d.ts.html#lib-option

Since you're seeing these errors, I'm assuming you're compiling to ES5. You can use typings to make Typescript recognize the es2015 functions for arrays.

First, install typings if not already installed.

npm install typings --global

Once you've installed typings, install type type definitions for ES2015 array functions.

typings install -SG env~es2015-array

If you're targeting a browser that does not support the new Array functions, you'll also need to add a polyfill.

I ended up doing the following:

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>

typescript

  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;
  }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM