0

我在使用 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”。

4

0 回答 0