Javascript 无法将值分配给typescript字典

Javascript 无法将值分配给typescript字典,javascript,dictionary,typescript,typescript1.8,Javascript,Dictionary,Typescript,Typescript1.8,我创建了一个打字字典。当我给它赋值时,我得到以下错误 TypeError: Cannot set property 'v1/items/someItemType/someItemId/EVENT/some DataTypeId' of undefined at MainClass.subscribe (G:\Projects\src\main\MainClass .js:9:3522) at Context.<ano

我创建了一个打字字典。当我给它赋值时,我得到以下错误

         TypeError: Cannot set property 'v1/items/someItemType/someItemId/EVENT/some
    DataTypeId' of undefined
          at MainClass.subscribe (G:\Projects\src\main\MainClass
    .js:9:3522)
          at Context.<anonymous> (G:\Projects\test\main\Wish.
    spec.js:45:18)
          at callFn (G:\Projects\node_modules\mocha\lib\runna
    ble.js:315:21)
          at Hook.Runnable.run (G:\Projects\node_modules\moch
    a\lib\runnable.js:308:7)
          at next (G:\Projects\node_modules\mocha\lib\runner.
    js:298:10)
          at Immediate._onImmediate (G:\Projects\node_modules
    \mocha\lib\runner.js:320:5)
下面是MyTopic的界面

export interface MyTopic {
  dataTypeID: string;
  itemID: string;
  itemType: string;
  dataType: MyDataType;
  qos: number;
}
然后,我尝试为这个字典赋值,如下所示

private subscriptionTopicsMap: StringTopicToMyTopicMap;

subscribe(myTopic: MyTopic) {
    if (_.isEmpty(myTopic)) {
      throw new MyError('myTopic cannot be empty');
    } else {
      let topic: string;
      topic = 'v1/items/' + myTopic.itemType + '/' + myTopic.itemID + '/'
        + myTopic.dataType + '/' + myTopic.dataTypeID;
      this.subscriptionTopicsMap[topic] = myTopic;
      this.client.subscribe(topic);
    }
  }
从行中抛出错误

this.subscriptionTopicsMap[topic] = myTopic;

我不熟悉打字。我做错了什么?请注意。

您尚未初始化您的
SubscriptionTopsMap
字典, 此外,您没有任何类实现
StringTopicToMyTopicMap
,并且可能被实例化

  class StringTopicToMyTopicMapClass implements StringTopicToMyTopicMap {
         [topic: string]: MyTopic;
  };

  private subscriptionTopicsMap: StringTopicToMyTopicMap = new StringTopicToMyTopicMapClass ();

声明时只需初始化属性

//private subscriptionTopicsMap: StringTopicToMyTopicMap;
private subscriptionTopicsMap: StringTopicToMyTopicMap = {};

我通常用一种更简单的方式来做,不需要第二个接口。 正如前面的答案一样,您需要如下所示的
={}

private subscriptionTopicsMap: { [id: string]: MyTopic; } = {};
this.subscriptionTopicsMap[topic] = myTopic;
private subscriptionTopicsMap: { [id: string]: MyTopic; } = {};
this.subscriptionTopicsMap[topic] = myTopic;