2016-05-18 2 views
0

Я создал словарный словарь. Когда я присваиваю ему значение, я получаю следующую ошибку.Невозможно присвоить значение словарям для ввода текста

  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) 

Ниже приведено описание словаря.

interface StringTopicToMyTopicMap { 
    [topic: string]: MyTopic; 
}; 

Ниже представлен интерфейс для 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; 

Я новичок в машинопись вещи. Что я здесь делаю неправильно? Пожалуйста посоветуй.

ответ

1

Просто инициализировать свойство при объявлении

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

вы не инициализирован ваш subscriptionTopicsMap словаря, Кроме того, вы не имеют любой класс, который реализует StringTopicToMyTopicMap, и может быть создан

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

    private subscriptionTopicsMap: StringTopicToMyTopicMap = new StringTopicToMyTopicMapClass(); 

Надеется, что это помогает !!

1

Я обычно не делаю это более легким способом, нет необходимости для второго интерфейса. Также в качестве ответа вам понадобится ={}, как показано ниже:

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

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

  • Нет связанных вопросов^_^