Небезопасное присвоение любого значения на машинописи Ошибка ESLint

#typescript #eslint #typescript-eslint

#typescript #eslint #typescript-eslint

Вопрос:

Довольно новичок в Typescript и имеет этот небольшой блок кода:

 let payload;
if (event.body) {
  payload = JSON.parse(event.body);
}
  

Строка полезной нагрузки выдает приведенную ниже ошибку из eslint:

 Unsafe assignment of an any value. eslint(@typescript-eslint/no-unsafe-assignment
  

Это скорее упражнение в понимании тонкостей совместной работы Typescript и eslint, что я могу сделать, чтобы решить эту проблему? Похоже, что незначительное изменение помогло бы, но я не смог найти ранее существовавший вопрос с тем же намерением. Заранее спасибо за помощь!

Ответ №1:

Я понял.

 let payload: unknown;
  

В результате тесты проходят для eslint.

Ответ №2:

Найдено решение наhttps://github.com/typescript-eslint/typescript-eslint/issues/2118

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

 function(str: string): Superobj {
  return JSON.parse() as Superobj
}
  

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

1. Я также обнаружил эту ошибку, если класс не найден (т. Е. Файл не загружен на сервер), поэтому при запуске lint он не может видеть класс, который мы пытаемся создать, и возвращает ошибку «Небезопасное построение значения любого типа».

2. Это не очень хорошая идея. Это дает вам ложное представление о том, что полученный вами JSON является Superobj. TypeScript не выдаст вам ошибок, но вы получите ошибки во время выполнения (например, при попытке получить доступ к параметру, который определен в Superobj, но фактически отсутствовал в JSON). Лучший подход — использовать защиту типа или предикаты типа для проверки структуры данных, прежде чем указывать TypeScript предполагать, что это тип: Подробнее о предикатах типа здесь: typescriptlang.org/docs/handbook/2 /…