我创建了一个打字稿字典。当我为它赋值时,我收到以下错误。
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;
我是打字稿的新手。我在这做错了什么?请指教。
答案 0 :(得分:1)
宣布
时初始化你的财产//private subscriptionTopicsMap: StringTopicToMyTopicMap;
private subscriptionTopicsMap: StringTopicToMyTopicMap = {};
答案 1 :(得分:1)
我通常以更简单的方式执行此操作,不需要第二个界面。
作为之前的答案,您需要={}
,如下所示:
private subscriptionTopicsMap: { [id: string]: MyTopic; } = {};
this.subscriptionTopicsMap[topic] = myTopic;
答案 2 :(得分:0)
您尚未初始化subscriptionTopicsMap
字典,
你也没有任何实现StringTopicToMyTopicMap
的类,并且可以实例化
class StringTopicToMyTopicMapClass implements StringTopicToMyTopicMap {
[topic: string]: MyTopic;
};
private subscriptionTopicsMap: StringTopicToMyTopicMap = new StringTopicToMyTopicMapClass ();
希望这会有所帮助!!