Всем привет!
Решил начать писать короткие статьи с маленькими фичами, которые могут помочь посмотреть на решение проблем немного под другим углом.
Дано:
Мы используем Fluent UI в нашем проекте. После перехода на React 18 мы начали получать ошибки такого рода:
Подобные ошибки могут возникать по вине любой рандомной библиотеки.
Типичное решение:
Из того что я находил в интернете — в основном рекомендуют поставить skipLibCheck: true или править и патчить. Можно также просто игнорировать. Ни один из этих вариантов мне не нравится по следующим причинам:
1. Из за skibLibCheck иногда пропускаются ошибки с типами в самом коде. Иногда компилятор перестает подсвечивать несуществующие типы. Потом когда выключаешь — получаешь сюрприз
2. Патчинг — можно пропатчить и поправить, но приходится следить за версией и когда разработчик библиотеки внесет изменения, нужно обновлять патчинг (неудобно)
3. Игнорирование — это работает до тех пор, пока ошибки не попадают в какую-либо автоматизацию. Например, мы используем pre-commit и проверяем типы перед тем как пушить коммит. Если их игнорировать — то комитить больше не получится.
Мое решение:
Подумав над проблемой, я заметил следующую особенность — ошибки в самом проекте начинаются с пути src/folder/file.ts, а из модулей с папки node_modules. Тогда мне пришла в голову идея — а что если фильтровать ответ от tsc —noEmit и проверять, есть ли ошибки не из папки node_modules. Мы используем Husky — husky — npm (npmjs.com) для pre-commit.
Приложил скрипт, (буду благодарен если кто-то сможет написать его оптимальнее, я не эксперт в баше) который вызывает проверку типов, сохраняет результат в файл, читает файл и фильтрует ошибки. Если ошибки только из папки node_modules — все ок. Если есть другие, то он вернет их в консоль.
#!/usr/bin/env sh . "$(dirname -- "$0")/_/husky.sh" cd ./ClientApp echo "Running tsc --noEmit --preatty" #! Сохраняю результат комманды в файл npm run typescript > output-file.txt | cat value=`cat output-file.txt` #! Ищу любое упоминание папки src \ если у вас другая рут папка #! поменяйте название result=$(grep -c src output-file.txt | cat) if [ $result -eq 0 ] then echo "OK: NO ERRORS FOUND" rm output-file.txt exit 0; else echo "FOUND ERRORS. RUN npm run typescript to check them and FIX before commiting"; grep src output-file.txt | cat rm output-file.txt exit 1; fi exit 1;
ссылка на оригинал статьи https://habr.com/ru/articles/752346/
Добавить комментарий