#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 или я делаю что-то не так.