Введите «строка» | null не может быть назначен для типа «строка»

Я использую angular-jwt, чтобы проверить, истек ли срок действия токена, и при использовании я получаю эту ошибку

Введите «строка» | null не может быть назначен для типа «строка»

helper = new JwtHelperService();

var token: string = localStorage.getItem('token');
this.helper.isTokenExpired(token); // this line contains the error

Ошибка

Какую версию TypeScript вы используете?

Lin Du 25.12.2020 12:52

@slideshowp2 спасибо за ответ. Я использую машинописную версию ~ 4.0.2.

Malik Haseeb 25.12.2020 12:54

Вы используете npmjs.com/package/@auth0/angular-jwt? Какая версия?

Lin Du 25.12.2020 12:54

Ошибка именно в том, что она означает: токен может быть null, и поэтому его нельзя передать в аргумент, который не принимает потенциальное нулевое значение. Перед передачей проверьте, является ли значение нулевым или нет. Или, если это значение null, измените его значение на undefined.

Terry 25.12.2020 12:55

Да, я использую auth0/angular-jwt

Malik Haseeb 25.12.2020 12:56

Код на скриншоте не соответствует коду над ним. localStorage.getItem может вернуть null, поэтому указание string в качестве типа для token, вероятно, вызовет ошибку в этот момент (если вы не используете строгие проверки нулей в своем tsconfig)

apokryfos 25.12.2020 13:48
Зод: сила проверки и преобразования данных
Зод: сила проверки и преобразования данных
Сегодня я хочу познакомить вас с библиотекой Zod и раскрыть некоторые ее особенности, например, возможности валидации и трансформации данных, а также...
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Как заставить Remix работать с Mantine и Cloudflare Pages/Workers
Мне нравится библиотека Mantine Component , но заставить ее работать без проблем с Remix бывает непросто.
Угловой продивер
Угловой продивер
Оригинал этой статьи на турецком языке. ChatGPT используется только для перевода на английский язык.
TypeScript против JavaScript
TypeScript против JavaScript
TypeScript vs JavaScript - в чем различия и какой из них выбрать?
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Синхронизация localStorage в масштабах всего приложения с помощью пользовательского реактивного хука useLocalStorage
Не все нужно хранить на стороне сервера. Иногда все, что вам нужно, это постоянное хранилище на стороне клиента для хранения уникальных для клиента...
Что такое ленивая загрузка в Angular и как ее применять
Что такое ленивая загрузка в Angular и как ее применять
Ленивая загрузка - это техника, используемая в Angular для повышения производительности приложения путем загрузки модулей только тогда, когда они...
1
6
6 706
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ваш токен не может быть нулевым. Пытаться

let token = localStorage.getItem('token');
token = token === null ? undefined : token;
this.helper.isTokenExpired(token);

Возможно, попробуйте добавить условие «если», прежде чем проверять, не является ли «токен» нулевым:

var token: string = localStorage.getItem('token');
if (token)
   this.helper.isTokenExpired(token); // this line contains the error
localStorage.getItem('token') возвращает string|null, поэтому это вызовет ошибку машинописного текста, если оно будет приведено к string
ABOS 25.12.2020 22:43

Вот решение.

let token: any = localStorage.getItem('token');

if (token == null)
  token = undefined;

return this.helper.isTokenExpired(token);
Ответ принят как подходящий

Сначала вы должны проверить свой токен

    var token: string = localStorage.getItem('token');
    if (token) {
       this.helper.isTokenExpired(token);
    }

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