объявление типа typescript показывает ошибку в IDE

#typescript #intellij-idea

#typescript #intellij-idea

Вопрос:

У меня есть следующее определение типа:

export type AuthType = boolean | { roles: string[]; assistant?: string[] } | (() => void);

Теперь у меня есть строка кода, в которой я хочу проверить тип моей auth переменной и присвоить значение или выполнить функцию:

req.allowed = auth === true ? this.allowed : auth.roles ? auth : auth();

Код работает нормально (эта строка выполняется только в том случае, если значение auth не равно false или null), но моя IDE (webstorm) показывает мне следующую ошибку:

введите описание изображения здесь

Ответ №1:

Вы не проверили, является ли объект объектом или нет auth , поэтому typescript пытается запретить вам доступ к roles свойству функции (которая не существует). Обратите внимание, что это не приведет к возникновению ошибки, но может ввести в заблуждение будущего читателя кода.

Судя по тому, как вы его настроили, вы, вероятно, захотите использовать необязательный оператор цепочки:

 req.allowed = auth === true ? this.allowed : auth?.roles ? auth : auth();
  

Это сделает так, чтобы auth?.roles оно оценивалось как неопределенное, если это функция.

Комментарии:

1. Спасибо за вашу помощь. Что ? не решает проблему. Вы также можете видеть, что отмечен вызов функции auth(). Я не уверен, является ли это ошибкой IDE или я делаю что-то не так.