Обновление: это была просто опечатка, я использовал [] вместо () в вызове функции.
Что здесь не так? Я пытаюсь найти значение перечисления в массиве этого типа перечисления. Но ТС жалуется, как видите.
export enum LearningStageType {
FUEL_DOOR_OFFSET = 'FUEL_DOOR_OFFSET',
VEHICLE_INFO = 'VEHICLE_INFO',
POSITIONING = 'POSITIONING',
CYCLE_DRY_RUN = 'CYCLE_DRY_RUN',
FINISH = 'FINISH',
}
// Type of `status` used below
export interface LearningStatus {
vehicleId: string;
licensePlate: string;
countryCode: ISO3166a2CountryCode;
// ...
allowedStages?: LearningStageType[];
}
// Type of `stage` in code below
export type LearningStage = {
stageType: LearningStageType;
instructionText: string;
instructionImage?: ImageSourcePropType;
title: string;
subtitle?: string;
mainComponent: React.FC<LearningStageProps>;
isAllowed?(status: LearningStatus, settings: LearningSettings): boolean;
};
// My code
const stage = stages[previousStageType];
if (skipValidation) {
return stage;
}
if (stage.isAllowed) {
return stage.isAllowed(status, settings) ? stage : null;
}
// The line that makes TS complain:
if (status.allowedStages?.includes[stage.stageType]) {
return stage;
}
return null;
Ошибка ТС:
(property) LearningStatus.allowedStages?: LearningStageType[] | undefined
Element implicitly has an 'any' type because expression of type 'LearningStageType' can't be used to index type '(searchElement: LearningStageType, fromIndex?: number | undefined) => boolean'.
Property '[LearningStageType.FUEL_DOOR_OFFSET]' does not exist on type '(searchElement: LearningStageType, fromIndex?: number | undefined) => boolean'.ts(7053)
includes
не является массивом. Вы не можете использовать []
на нем. Вы имели в виду includes(stage.stageType)
?
Проблема в том, что вы используете метод includes
нестандартным способом. Вместо того, чтобы вызывать его как функцию, вы используете неправильную нотацию с квадратными скобками. Правильный способ использования метода includes
будет следующим:
if (status.allowedStages?.includes(stage.stageType)) {
return stage;
}
Таким образом, компилятор TypeScript распознает включение как метод и не выдаст ошибку.
Спасибо, я быстро заметил, что это опечатка :) facepalm
Включает функцию детектора обратного вызова