簡體   English   中英

使用枚舉作為 object 文字的鍵

[英]Use enum as key of a object literal

我在下面突出顯示的行中不斷收到以下錯誤:

TS7053:元素隱式具有“任何”類型,因為“字符串”類型的表達式不能用於索引類型“ICourseContent”。 在“ICourseContent”類型上找不到具有“字符串”類型參數的索引簽名。

let elementsRemaining = 0;
[
  CourseContentElementType.AUDIO,
  CourseContentElementType.VIDEO,
  CourseContentElementType.IMAGE,
  CourseContentElementType.DOCUMENT,
  CourseContentElementType.CODE,
  CourseContentElementType.QUIZ,
  CourseContentElementType.EMBED,
].forEach((elementType) => {
  if (
    // Error occurs here
    courseContents[this.getCourseContentIndex(courseContents, selectedCourseContentUid) - 1][
      elementType as string
    ] != null
  ) {
    elementsRemaining++;
  }
});

object如下:

export interface ICourseContent {
  id: number;
  uid?: string;
  text: ICourseContentElementText;
  button: ICourseContentElementButton[];
  audio?: ICourseContentElementMedia;
  embed?: ICourseContentElementEmbed;
  video?: ICourseContentElementMedia;
  image?: ICourseContentElementImage;
  quiz?: ICourseContentElementQuiz;
  code?: ICourseContentElementCode;
  document?: ICourseContentElementDocuments;
  camera?: ICourseContentElementCamera;
}

枚舉如下:

export enum CourseContentElementType {
  CARD = 'card',
  TEXT = 'text',
  BUTTON = 'button',
  CODE = 'code',
  DOCUMENT = 'document',
  AUDIO = 'audio',
  VIDEO = 'video',
  IMAGE = 'image',
  QUIZ = 'quiz',
  EMBED = 'embed',
}

如何在 ICourseContent 上創建索引簽名,以便我可以使用枚舉訪問我的索引?

我嘗試了以下方法:

export interface ICourseContent {
  id: number;
  uid?: string;
  [key: string]: string;
  text: ICourseContentElementText;
  button: ICourseContentElementButton[];
  audio?: ICourseContentElementMedia;
  embed?: ICourseContentElementEmbed;
  video?: ICourseContentElementMedia;
  image?: ICourseContentElementImage;
  quiz?: ICourseContentElementQuiz;
  code?: ICourseContentElementCode;
  document?: ICourseContentElementDocuments;
  camera?: ICourseContentElementCamera;
}

但我收到錯誤消息:

TS2411:“數字”類型的屬性“id”不可分配給字符串索引類型“字符串”。

TS2411:“字符串”類型的屬性“uid”| undefined' 不能分配給字符串索引類型'string'。

TS2411:“ICourseContentElementText”類型的屬性“文本”不可分配給字符串索引類型“字符串”。

TS2411:“ICourseContentElementButton[]”類型的屬性“按鈕”不可分配給字符串索引類型“字符串”。

我這樣做了,錯誤消息消失了:

  static isEnoughCourseContentElementsPresent(
    courseContents: ICourseContent[],
    selectedCourseContentUid: string,
    elementsRequired = 1
  ): boolean {
    let elementsRemaining = 0;
    [
      CourseContentElementType.AUDIO,
      CourseContentElementType.VIDEO,
      CourseContentElementType.IMAGE,
      CourseContentElementType.DOCUMENT,
      CourseContentElementType.CODE,
      CourseContentElementType.QUIZ,
      CourseContentElementType.EMBED,
    ].forEach((elementType) => {
      if (
        courseContents[this.getCourseContentIndex(courseContents, selectedCourseContentUid) - 1][
          elementType as
            | CourseContentElementType.AUDIO
            | CourseContentElementType.VIDEO
            | CourseContentElementType.IMAGE
            | CourseContentElementType.DOCUMENT
            | CourseContentElementType.CODE
            | CourseContentElementType.QUIZ
            | CourseContentElementType.EMBED
        ] != null
      ) {
        elementsRemaining++;
      }
    });
    if (
      courseContents[this.getCourseContentIndex(courseContents, selectedCourseContentUid) - 1].text
        .html != null
    ) {
      elementsRemaining++;
    }
    return elementsRemaining === elementsRequired;
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM