【问题标题】:TypeScript: Element implicitly has an 'any' type because expression of type 'string' can't be used to index typeTypeScript:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型
【发布时间】:2020-11-13 17:06:06
【问题描述】:

我正在将我的 react 应用从 JavaScript 转换为 TypeScript 试图弄清楚如何解决以下错误

元素隐含地具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型“计划”。 在“Schedule”类型上找不到带有“string”类型参数的索引签名。

这是代码...

  export interface Schedule {
    display: Display;
    monday: Day;
    tuesday: Day;
    wednesday: Day;
    thursday: Day;
    friday: Day;
    saturday: Day;
    sunday: Day;
  }

  export interface Diary {
    schedule: Schedule;
    appointments: Array<Appointment>;
  }

 // ...

 const dayKey: string = 'monday'
 const day: Day = diary.schedule[dayKey]  // <-- Here is the error

 // ...

以前,由于我在 JavaScript 中使用的数据结构只是 json,因此这是一种享受,但我正在努力理解如何使用 TypeScript 实现同样的目标。

谢谢

【问题讨论】:

    标签: typescript


    【解决方案1】:

    您可以为此使用 TypeScript 的 keyof 关键字:

    const dayKey: keyof Schedule = 'monday'
    

    【讨论】:

      【解决方案2】:
      const dayKey: string = 'monday';
      

      这上面的类型是string,太笼统了。并非每个字符串在调度对象中都有一个条目。您和我都知道,当您执行 diary.schedule[dayKey] 时,唯一可能访问的是 "monday",但这在 typescript 正在使用的类型信息中不可用。

      您有多个更具体类型的选项。您可以指定它是 Schedule 中的键之一:

      const dayKey: keyof Schedule = 'monday';
      

      或者您可以指定它专门为"monday"

      const dayKey: 'monday' = 'monday';
      

      另一种指定具体为"monday" 的方法如下:

      const dayKey = 'monday' as const;
      

      【讨论】:

        猜你喜欢
        • 2019-12-17
        • 2021-05-04
        • 2021-02-28
        • 2021-03-17
        • 2021-04-20
        • 1970-01-01
        • 1970-01-01
        • 2020-10-29
        • 2020-10-04
        相关资源
        最近更新 更多