我正在学习打字稿,我不知道该怎么解决。
我的目标是找到一个键:一些随机文本中的字符串,并将其替换为值:字符串。
export class Smiley {
private smiley: {[key: string]: {value: string}} = {
':-)': '°>sm_00...b.pw_18.ph_18.gif<°',
':-(': '°>sm_03...b.pw_18.ph_18.gif<°',
':-|': '°>sm_13...b.pw_18.ph_18.gif<°',
':-D': '°>sm_10...b.pw_18.ph_18.gif<°',
':-O': '°>sm_06...b.pw_18.ph_18.gif<°',
};
tbsmiley(str: string): string {
const obj = this.smiley;
Object.keys(obj).forEach((key) => {
const ind = str.indexOf(key);
if ( ind >= 0 ) {
str = str.substring(0, ind) + obj[key] + str.substr(ind + key.length);
return str;
}
});
return str;
}
}
类型'string'不能分配给类型'{value:string; }'。 预期的类型来自此索引签名。
答案 0 :(得分:1)
您要么需要这个...
private smiley: {[key: string]: string } = { // <--- changed type
':-)': '°>sm_00...b.pw_18.ph_18.gif<°',
':-(': '°>sm_03...b.pw_18.ph_18.gif<°',
};
...或者您需要这个。
private smiley: {[key: string]: { value: string } } = {
':-)': { value: '°>sm_00...b.pw_18.ph_18.gif<°' }, // <-- changed values
':-(': { value: '°>sm_03...b.pw_18.ph_18.gif<°' }, // <-- changed values
};
请注意,index type's值不需要value
关键字。
这里是另外两个例子。 ObjectValues
类型就是您所做的; StringValues
类型可能就是您想要的。
type ObjectValues = {
[key: string]: { value: string }
}
const objectValues: ObjectValues = {
'someKey1': { value: 'someValue1' },
'someKey2': { value: 'someValue2' }
}
type StringValues = {
[key: string]: string;
}
const stringValues: ObjectValues = {
'someKey1': 'someValue1',
'someKey2': 'someValue2',
}
这是您使用两种方法的示例in the playground和also here in the playground。