ES5与ES6 Javascript for Arrays

时间:2016-08-01 21:43:41

标签: javascript arrays typescript ecmascript-6 es5-shim

我正在尝试将以下内容转换为工作,但我认为这是一个Es5 / ES6问题。帮助感谢。

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

3 个答案:

答案 0 :(得分:1)

  

类型'ArrayConstructor'上不存在'from'属性。

这表明您希望在仍编译为ES5时使用ES6类型定义。

在TypeScript latest中推荐lib选项:

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

更多

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

答案 1 :(得分:0)

由于您看到了这些错误,我假设您正在编译ES5。您可以使用typings使Typescript识别数组的es2015函数。

首先,如果尚未安装,请安装typings

npm install typings --global

安装打字后,请安装ES2015阵列功能的类型定义。

typings install -SG env~es2015-array

如果您的目标是不支持新数组功能的浏览器,则还需要添加填充。

答案 2 :(得分: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;
  }