Пакет type-coverage
Я верю, что когда в TypeScript-коде есть
Есть удобный пакет
1. Самый простой способ — запустить
2. Для более удобной отладки можно прикрутить ещё один пакет, typescript-coverage-report. Он выводит отчёт в более удобном виде: табличкой в консоль и ещё более умной табличкой в HTML. Если ваш пайплайн CI/CD умеет работать с артефактами, этот отчёт можно прикрутить в описание пулл-реквеста, например.
3. Можно добавить в package.json минимально допустимое значение покрытия типами и настроить проверки на prepush-хуках, в PR и в релизах, например, чтобы нельзя было ухудшить покрытие. Знаю, в некоторых командах есть договорённости всё покрывать типами, и такая проверка экономит когнитивные усилия на код-ревью.
https://github.com/plantain-00/type-coverage
Я верю, что когда в TypeScript-коде есть
any
или костыльные приведения типов через unknown
, то такой код может когда-нибудь выстрелить. Особенно если вы полагаетесь на типы как на один из слоёв его тестирования. Поэтому периодически в своих проектах прохожусь по any
и вычищаю их.Есть удобный пакет
type-coverage
, который ускоряет такую чистку. И его можно использовать по-разному:1. Самый простой способ — запустить
npx type-coverage
в папке проекта, и он вам выдаст процент покрытия ts-файлов типами. Есть разные флаги, которые делают проверку строже, игнорируют try-catch, подсвечивают проблемные места в файлах и так далее.
2633 / 2670 98.61%
type-coverage success.
2. Для более удобной отладки можно прикрутить ещё один пакет, typescript-coverage-report. Он выводит отчёт в более удобном виде: табличкой в консоль и ещё более умной табличкой в HTML. Если ваш пайплайн CI/CD умеет работать с артефактами, этот отчёт можно прикрутить в описание пулл-реквеста, например.
3. Можно добавить в package.json минимально допустимое значение покрытия типами и настроить проверки на prepush-хуках, в PR и в релизах, например, чтобы нельзя было ухудшить покрытие. Знаю, в некоторых командах есть договорённости всё покрывать типами, и такая проверка экономит когнитивные усилия на код-ревью.
{
"typeCoverage": {
"atLeast": 99
}
}
https://github.com/plantain-00/type-coverage