我在使用 TypeScript 编译器时遇到了一个问题,我试图用字符串索引任何类型。我更熟悉动态编程语言(阅读:Python),我可以用字典轻松地做到这一点。
假设我有两种类型:
type PageLoadedType = {
page: {
pageTitle: string;
pageName: string;
}
}
type ButtonClickType = {
buttonClick: {
location: string;
buttonName: string;
}
}
我将这两种类型组合成 EventTypes 以分配给一个变量:
type EventTypes = PageLoadedType | ButtonClickType | undefined;
现在我有一个分配为事件类型的变量,我想遍历嵌套对象以获取子对象并从子字符串中删除字符。所以:
let myEvent: EventTypes = {
buttonClick: {
location: 'Chicago, Illinois',
buttonName: 'submit-location'
}
}
Object.keys(myEvent as {}).forEach((key) => {
Object.keys(myEvent[key]).forEach((innerKey) => {
myEvent[key][innerKey] = myEvent[key][innerKey].slice(0,5)
}
}
我的问题是编译器抱怨并声明:
元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于 dex 类型“PageLoadedType | 按钮点击类型'。在“PageLoadedType |”类型上找不到带有“字符串”类型参数的索引签名。按钮点击类型'
我该如何解决这个问题,什么是“最佳实践”解决方案?我确定我错过了一些简单的东西,因为我是 TypeScript 的新手。请注意,我不能让编译器接受关键字“any”。