类型'string'不能分配给类型'{value:string; }'

时间:2019-07-04 23:40:42

标签: typescript

我正在学习打字稿,我不知道该怎么解决。

我的目标是找到一个键:一些随机文本中的字符串,并将其替换为值:字符串。

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; }'。 预期的类型来自此索引签名。

1 个答案:

答案 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 playgroundalso here in the playground