[英]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.