#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 /…