TypeScript ругается при использовании `includes()` для значения перечисления

Обновление: это была просто опечатка, я использовал [] вместо () в вызове функции.

Что здесь не так? Я пытаюсь найти значение перечисления в массиве этого типа перечисления. Но ТС жалуется, как видите.

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)

Включает функцию детектора обратного вызова

Daniel A. White 10.02.2023 14:42
includes не является массивом. Вы не можете использовать [] на нем. Вы имели в виду includes(stage.stageType) ?
apokryfos 10.02.2023 14:51
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Проблема в том, что вы используете метод includes нестандартным способом. Вместо того, чтобы вызывать его как функцию, вы используете неправильную нотацию с квадратными скобками. Правильный способ использования метода includes будет следующим:

if (status.allowedStages?.includes(stage.stageType)) {
  return stage;
}

Таким образом, компилятор TypeScript распознает включение как метод и не выдаст ошибку.

Спасибо, я быстро заметил, что это опечатка :) facepalm

Esben von Buchwald 16.02.2023 14:44

Другие вопросы по теме

Похожие вопросы