在TypeScript

时间:2020-06-29 01:00:32

标签: typescript typescript-typings typescript-generics

我遇到了TypeScript编译器遇到的问题,我试图用字符串索引任何类型。我对动态编程语言(阅读:Python)更加熟悉,在这里我可以轻松地通过字典来做到这一点。

假设我有两种类型:

type PageLoadedType = {
  page: {
    pageTitle: string;
    pageName: string;
  }
}
type ButtonClickType = {
  buttonClick: {
    location: string;
    buttonName: string;
  }
}

我将这两种类型组合成EventType以分配给变量:

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)
  }
}

我的问题是编译器抱怨并指出:

元素隐式地具有“ any”类型,因为类型'string'的表达式不能用于 dex类型'PageLoadedType | ButtonClickType”。 在类型'PageLoadedType |中找不到参数类型为'string'的索引签名。 ButtonClickType'

我该如何解决?什么是“最佳实践”解决方案?我确信我是TypeScript的新手,所以我缺少一些简单的东西。请注意,我不允许编译器接受关键字“ any”。

0 个答案:

没有答案