28344


`"noImplicitAny": true`の設定で以下のコードを書いています

[code]

        let tables = [
            'a',
            'b',
            'c'
        ];
    
        let select_columns = {
            'a': ['a1', 'a2'],
            'b': ['b1', 'b2'],
            'c': ['c1', 'c2']
        };
        for (let table of tables) {
            console.log(select_columns[table]);
        }
    
[/code]

するとconcole.logの箇所で以下の様なエラーが出てしまいます。

[code]

    [ts] 
    Index signature of object type implicitly has an 'any' type.
    let select_columns: {
        'a': string[];
        'b': string[];
        'c': string[];
    }
    
[/code]

エラーが出ないようにするにはどの様に書けばいいのでしょうか？


CC BY-SA 3.0
2016-08-16T13:06:49.570
28317
2016-08-18T04:41:53.370
2016-08-18T04:41:53.370
14874
14874
question
typescript
noImplicitAny:true 設定時のobjectのアクセスについて教えて下さい


以下のように型注釈を書きましょう。

[code]

    let select_columns: {[idx: string]: string[]} = {
        ...
    }
    
    // または
    
    interface Columns {
        [idx: string]: string[];
    }
    
    let select_columns: Columns = {
        ...
    }
    
[/code]

idxは任意の識別子で構いません。

この型は、string型で[]アクセスするとstring[]型を返すようなオブジェクトを表します。  
この型注釈を書かないと、select_columnsは3つのメンバーa、b、cを持つオブジェクトと解釈されます。  
その場合、例えば`select_columns['a']`はコンパイルエラーになりません。


CC BY-SA 3.0
2016-08-17T16:17:16.673
28344
2016-08-17T16:17:16.673
18491
28317
answer