如何在TypeScript中动态添加项目到元组?

时间:2016-05-27 01:20:51

标签: javascript typescript

这个问题来自How to push item to [string] in TypeScript

我想创建如下的函数。

declare var sqlitePlugin:any;

getItems(options, callback) {

  var query: string = `SELECT item_code,
                        item_name
                      FROM items `;

  var param: [string];

  if (options['limit']) {
    var limit = options['limit'];
    query = query + " LIMIT ? ";
    param.push(String(limit));
  }

  if (options['offset']) {
    var offset = options['offset'];
    query = query + " OFFSET ? ";
    param.push(String(offset));
  }

  this.execQuery(query, param, (resultSet)=>{
    this.items = [];
    for(let i = 0; i < resultSet.rows.length; i++) {
      var item: Item = new Item();
      item.code = resultSet.rows.item(i).item_code;
      item.name = resultSet.rows.item(i).item_name;
      this.artists.push(item);
    }
    callback(this.items);
  } );
}
需要设置execQuery函数&#39; param&#39;参数类型为[string]

所以我宣布了#param&#39;元组为[string]

我想通过options['limit']options['offset']值动态更改参数元组。

param.push(String(limit));失败,因为param未定义,因此我尝试var param: [string] = [];然后发生语法错误。

  

[ts]输入&#39; undefined []&#39;不能分配给&#39; [string]&#39;。财产&#39; 0&#39;缺少类型&#39; undefined []&#39;。

如何解决这个问题?

提前致谢。

2 个答案:

答案 0 :(得分:1)

如果你真的想要一个元素元组,你只需要分配它而不是使用push:

let param: [string];

if (options['limit']) {
    let limit = options['limit'];
    query = query + " LIMIT ? ";
    param = [String(limit)];
}

但这不允许你同时拥有偏移和限制。你可能想要:

 let param: string[] = []

使用.push()

答案 1 :(得分:0)

使用var params: string[] = [];使用语句var param: string[];时,只声明其类型,params未定义。
请勿使用var