首页 文章

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

提问于
浏览
0

这个问题来自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函数需要将'param'参数设置为 [string] 的类型 .

所以我将'param'元组声明为 [string] .

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

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

[ts]类型'undefined []'不能分配给'[string]'类型 . 'undefined []'类型中缺少属性'0' .

我该如何解决这个问题?

提前致谢 .

2 回答

  • 1

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

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

    但这不允许您同时具有偏移和限制 . 你可能想要:

    let param: string[] = []
    

    使用 .push()

  • 0

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

相关问题