Простой способ проверять typescript без skipLibCheck: true

от автора

Всем привет!

Решил начать писать короткие статьи с маленькими фичами, которые могут помочь посмотреть на решение проблем немного под другим углом.

Дано:

Мы используем Fluent UI в нашем проекте. После перехода на React 18 мы начали получать ошибки такого рода:

Ошибки в типах node_modules.

Ошибки в типах node_modules.

Подобные ошибки могут возникать по вине любой рандомной библиотеки.

Типичное решение:

Из того что я находил в интернете — в основном рекомендуют поставить 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *