Задать вопрос
@700Hp

Почему ругается Vscode на типы?

Всем привет, подскажите как побороть ошибку типизации
Есть данный участок кода в компоненте vue
<span v-if="item.append.componentOptions?.counter" class="counter">
                {{ item.append.componentOptions?.counter }}
              </span>


Ошибка гласит так:

Свойство "counter" не существует в типе "ISharedButtonProps | ITextProps | TOptionsSize | IOptionSTimer | TCounter".
Свойство "counter" не существует в типе "ISharedButtonProps".ts(2339)


Тип интерфейса:

type TCounter = {
  counter: number | string | null;
};

export interface INavigationGroupComponent extends IComponent {
  class?: string;
  componentOptions?: ITextProps | TOptionsSize | IOptionSTimer | TCounter | ISharedButtonProps;
}


При чём, если оставляю из списка возможных все, кроме TCounter, то ошибка пропадает.
  • Вопрос задан
  • 107 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Мидл фронтенд-разработчик
    5 месяцев
    Далее
  • Яндекс Практикум
    React-разработчик
    3 месяца
    Далее
  • Яндекс Практикум
    Фронтенд-разработчик
    10 месяцев
    Далее
Решения вопроса 1
Aetae
@Aetae Куратор тега TypeScript
Тлен
Ну потому что это union - он строгий, он позволяет получать свойство напрямую только в том случае, если оно есть у всех членов union'а. В ином случае надо руками делать проверку, которая сузит тип до нужного. if ('counter' in ...) и т.п.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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