2016-05-27 23 views
0

この質問はHow to push item to [string] in TypeScriptTypeScriptで項目を動的にタプルに追加するにはどうすればよいですか?

次のような機能を作りたいと思います。

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]の型として設定する必要があります。

だから私は[string]と 'param'タプルを宣言しました。

options['limit']options['offset']の値で動的にparam tupleを変更したいとします。

ただし、paramが定義されていないのでparam.push(String(limit));が失敗しましたので、var param: [string] = [];を入力して構文エラーが発生しました。

[ts]タイプ 'undefined []'はタイプ '[string]'に割り当てられません。型 'undefined []'にプロパティ '0'がありません。

どのようにこの問題を解決できますか?

ありがとうございます。

答えて

1

あなたが本当に単一要素のタプルを持つようにしたい場合は、あなただけのプッシュを使用するのではなく、それを割り当てる必要があります。

let param: [string]; 

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

しかし、これはあなたがオフセットと制限しているとの両方を許可しません。 .push()

+0

ありがとう。私は[string]型を使う必要があります。なぜなら、プラグイン関数の設計は、オプションの数によってタプル項目を動的に追加するからです。例)[10、20]、[10]、[20] – tomo

+1

それは単なる配列であり、タプルではありません。 Javascriptはタプルをサポートしていません。 Typescriptは特定の配列をtypescriptコンパイラによってのみ制御される指定された数の要素として扱います。それはあなたに警告しますが、あなたが何かをするのを妨げることはありません。プラグインが_tuple_を必要としていると言っても、まだ配列のままです。このプラグインを使用している場合は、配列を渡してください。あなたがそれを制作しているなら、あなたは間違ったデータ構造を選んでいます。あなたの答えは – cdbajorin

+0

ありがとう。今は非常に明確です。 – tomo

0

使用var params: string[] = [];ステートメントvar param: string[];を使用すると、そのタイプのみが宣言されます。paramsは未定義です。
varを使用しないでください。

+0

感謝を使用している間

let param: string[] = [] 

が、ExecQueryメソッドは、paramパラメータとして[文字列]を設定する必要があります:あなたはおそらくしたいです。ありがとう。 – tomo

関連する問題