我正在将我的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实现相同的功能。
谢谢
答案 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'