我正在尝试修复此错误“由于类型为”string“的表达式不能用于索引类型,因此元素隐式具有”any“类型”
下面是我的代码,
enum Status {
CANCELLED = 'cancelled',
FAILED = 'failed',
}
const titleByStatus = {
[Status.CANCELLED]: (name: string) => {
return `${name} is cancelled`;
},
[Status.PASSED]: (name: string) => {
return `${name} matches`;
},
};
const getTitle = () => {
if (result) {
if (result.title && result.title !== '') {
return result.title;
} else {
creturn titleByStatus[Status.CANCELLED](name) //error here
}
} else {
return something[Status.CANCELLED];
}
我有这个getTitle正在使用的2个地方的结果是不同的和状态。取消被替换为一些东西。状态
所以我试着重写可重用的代码
const getTitle = (result: any, status: someTypefromQuery, name: string) => {
if (result) {
if (result.title && result.title !== '') {
return result.title;
} else {
return titleByStatus[status](name) //error here
}
} else {
return something[status];
}
};
但我得到错误元素隐式具有'any'类型,因为'string'类型的表达式不能用于使用typescript的索引类型?
我在两个地方这样称呼它const title = getTitle(结果,状态.已取消,名称)const title = getTitle(结果,某个东西.状态,名称)
有人能帮我一下吗?谢谢。
2条答案
按热度按时间byqmnocz1#
第二个函数要达到什么目的还不完全清楚(result.title ......那么title是要在特定于状态的上下文中测试与给定事件名称的匹配吗?)
无论如何,我想这会有帮助
此输出
索引隐式具有any类型,因为在对象索引中使用了枚举,而没有将对象字段定义为
readonly
,这是as const
在titleByStatus
对象定义之后实现的。现在有0个索引错误,您可以在此处的typescript playground链接上查看它qoefvg9y2#
您可以尝试使用这个工作代码,它来自您的示例。