66263


## 概要

現在、TypeScriptを用いた開発を行っていますが、２次元配列の型定義で詰まってしまいました。  
具体的には、下記の様な配列をTypeScriptで型定義するのに詰まっています。

[code]

    const clapped_items[
      2: [
        {
            "user_id": 0,
            "clapped_num": 15
        },
        {
            "user_id": 1,
            "clapped_num": 3
        },
      ],
      5: [
        {
            "user_id": 3,
            "clapped_num": 15
        },
        {
            "user_id": 2,
            "clapped_num": 3
        },
        {
            "user_id": 4,
            "clapped_num": 11
        },
      ]
    ];
    
[/code]

自分では下記の様に型定義しましたが、この方法ではエラーが出てダメです。

[code]

    interface IClappedItem {
      user_id: number;
      clapped_num: number;
    }
    interface IClappedItems {
     {[key:number]: IClappedItem[]}[]
    };
    
    
[/code]

自分なりに色々調べてみましたが、解決せず…。  
どなたか解決方法のご教授お願いいたします。


CC BY-SA 4.0
2020-05-03T21:17:09.113
66261
2020-05-04T01:02:26.473
32711
question
typescript
TypeScriptによる２次元配列の型定義


最初の「下記の様な」構造がうまく表記できていないので、うまく行っていないような気がします。

目標としては、このような宣言ができるように`IClappedItems`を定義したいのだと思うのですが、いかがでしょうか?

[code]

    const clapped_items: IClappedItems = {
        2: [
            {
                "user_id": 0,
                "clapped_num": 15
            },
            {
                "user_id": 1,
                "clapped_num": 3
            },
        ],
        5: [
            {
                "user_id": 3,
                "clapped_num": 15
            },
            {
                "user_id": 2,
                "clapped_num": 3
            },
            {
                "user_id": 4,
                "clapped_num": 11
            },
        ]
    };
    
[/code]

だとすれば、`clapped_items`の一番外側の構造は配列ではなく、オブジェクトです。

  * 外側の`[]`は要りません
  * `{ }`を二重にする必要はありません

と言うわけで、このようにすればいいはずです。

[code]

    interface IClappedItem {
      user_id: number;
      clapped_num: number;
    }
    interface IClappedItems {
     [key:number]: IClappedItem[]
    };
    
[/code]

* * *

もし、私の解釈が誤っていて、「配列を値に持つオブジェクト」ではなく、「配列の配列」( _２次元配列_
)を定義したいのであれば、ご質問文がそれを正しく表すよう、修正してください。


CC BY-SA 4.0
2020-05-04T01:02:26.473
66263
2020-05-04T01:02:26.473
13972
66261
answer