TypeScript:元素隐式地具有“ any”类型,因为类型“ string”的表达式不能用于索引类型

时间:2020-07-23 21:19:53

标签: typescript

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

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

这是代码...

  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实现相同的功能。

谢谢

2 个答案:

答案 0 :(得分:2)

const dayKey: string = 'monday';

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

您可以选择几种更具体的类型。您可以指定它为Schedule中的键之一:

const dayKey: keyof Schedule = 'monday';

或者您可以指定它具体为"monday"

const dayKey: 'monday' = 'monday';

另一种指定具体为"monday"的方式是这样的:

const dayKey = 'monday' as const;

答案 1 :(得分:1)

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

const dayKey: keyof Schedule = 'monday'