我正在将我的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实现同样的事情。
谢谢
3条答案
按热度按时间k10s72fa1#
上面的类型是
string
,这太一般了。不是每个字符串在schedule对象中都有一个条目。你我都知道,当你执行diary.schedule[dayKey]
时,唯一可能访问的东西是"monday"
,但这在typescript处理的类型信息中不可用。您有多个更具体类型的选项。您可以指定它是Schedule中的一个键:
或者您可以指定它具体为
"monday"
另一种指定它是
"monday"
的方法如下:tgabmvqs2#
您可以使用TypeScript的
keyof
保留字:eufgjt7s3#
更喜欢使用特定的数据类型。但在少数情况下,当你得到动态响应时,你可以这样声明: