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

pkmbmrz7  于 2022-12-05  发布在  TypeScript
关注(0)|答案(3)|浏览(160)

我正在将我的react应用程序从JavaScript转换为TypeScript,试图找出如何解决以下错误
元素隐式具有“any”类型,因为类型“string”的表达式不能用于索引类型“Schedule”。在类型“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实现同样的事情。
谢谢

k10s72fa

k10s72fa1#

const dayKey: string = 'monday';

上面的类型是string,这太一般了。不是每个字符串在schedule对象中都有一个条目。你我都知道,当你执行diary.schedule[dayKey]时,唯一可能访问的东西是"monday",但这在typescript处理的类型信息中不可用。
您有多个更具体类型的选项。您可以指定它是Schedule中的一个键:

const dayKey: keyof Schedule = 'monday';

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

const dayKey: 'monday' = 'monday';

另一种指定它是"monday"的方法如下:

const dayKey = 'monday' as const;
tgabmvqs

tgabmvqs2#

您可以使用TypeScript的keyof保留字:

const dayKey: keyof Schedule = 'monday'
eufgjt7s

eufgjt7s3#

更喜欢使用特定的数据类型。但在少数情况下,当你得到动态响应时,你可以这样声明:

let obj = Array<any>()

相关问题