2016-05-27 1 views
0

этот вопрос приходит от How to push item to [string] in TypeScriptКак добавить элемент динамически к кортежу в 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 необходимо установить «пары» параметр как тип [string].

Таким образом, я объявил 'param' кортеж как [string].

Я хочу изменить динамический кортеж options['limit'] и options['offset'] значение.

Но param.push(String(limit)); терпит неудачу, потому что параметр undefined, поэтому я попробовал var param: [string] = [];, тогда произошла синтаксическая ошибка.

[ts] Тип 'undefined []' не присваивается типу '[string]'. Свойство '0' отсутствует в типе 'undefined []'.

Как решить эту проблему?

Заранее спасибо.

ответ

1

Если вы действительно хотите иметь один элемент кортежа, вам нужно просто назначить его вместо того, чтобы использовать толчок:

let param: [string]; 

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

Но это не позволит вам иметь как смещение и предел. Вы, вероятно, хотите:

let param: string[] = [] 

при использовании .push()

+0

спасибо. Мне нужно использовать тип [string], потому что дизайн функции плагина и динамическое добавление элемента tuple зависит от количества параметров. ex) [10, 20], [10], [20] – tomo

+1

Тогда это всего лишь массив, а не кортеж. Javascript не поддерживает кортежи. Машинопись обрабатывает определенные массивы как определенное количество элементов, только управляемое машинописным компилятором. Он предупредит вас, но это не помешает вам что-либо сделать. Если плагин говорит, что ему требуется _tuple_, это все равно только массив. Если вы используете этот плагин, просто передайте массив. Если вы его создаете, вы выбрали неверную структуру данных. – cdbajorin

+0

спасибо за ваш ответ. теперь его очень ясно. – tomo

0

Использование var params: string[] = []; Когда вы используете оператор var param: string[];, вы объявляете его только тип, params не определен.
Не использовать var.

+0

спасибо, но ExecQuery необходимо установить [строку] в качестве параметра паров. – tomo

Смежные вопросы