TypeScript:元素隐式具有“任何”类型,因为“字符串”类型的表达式不能用于索引类型

凯兰克斯

我正在将我的 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 实现同样的目标。

谢谢

尼古拉斯大厦
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;

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章