Использование аргумента компилятора TypeScript 'skipLibCheck'

Я исследовал для дальнейшего объяснения в аргументе компилятора skipLibCheck TypeScript, чтобы определить, насколько он установлен в true. Самое подробное объяснение, которое я нашел, следующее:

Новый --skipLibCheck TypeScript 2.0 добавляет новый параметр компилятора --skipLibCheck, который вызывает проверку типов файлов декларации (файлы с расширением.d.ts) для пропуска. Когда программа включает в себя большие файлы декларации, компилятор тратит много объявлений на проверку типов времени, которые, как известно, не содержат ошибок, а время компиляции может быть значительно сокращено путем пропуска проверки типов файлов объявлений.

Поскольку объявления в одном файле могут влиять на проверку типов в других файлах, некоторые ошибки могут не обнаруживаться, если указан --skipLibCheck. Например, если файл без декларации увеличивает тип, объявленный в файле декларации, могут возникнуть ошибки, которые будут отображаться только при проверке файла декларации. Однако на практике такие ситуации встречаются редко.

Я понимаю, что вы, очевидно, получаете преимущество в производительности от компилятора, которому не нужно вводить файлы проверки, которые считаются не содержащими ошибок, но я видел, что этот флаг используется для обхода ошибок, исходящих из компилятора, в отношении файлов декларации, имеющих проблемы.

Разумеется, использование этого флага для обойти это снижает целостность ввода вашего приложения?

Ответ 1

Перефразируя вопрос кратко:

Конечно, [включение skipLibCheck] снижает целостность типизации вашего приложения?

Я бы согласился, что да, это так. Однако, если альтернативой является приложение, которое не компилируется, оно становится удобным флагом.

В то время как сам Typescript является достаточно зрелым, сообщество машинописцев все еще относительно молодо. Существуют определения типов, доступные для множества библиотек и даже некоторых собственных библиотек машинописи, но они могут быть несовместимы друг с другом по ряду причин.

Вы можете импортировать библиотеку, типизация которой построена с менее строгим tsconfig, чем вы хотели бы - на что ваш компилятор может жаловаться, когда вы пытаетесь его использовать.

Вы можете найти две библиотеки, определяющие одинаковые типы, но несовместимые. Я импортировал несколько библиотек, которые предоставили свои собственные типы для Polyfill of Buffer, и все мое приложение не смогло скомпилироваться из-за их несовместимости.

Включение --skipLibCheck может помочь обойти эти проблемы. Включение этого параметра не позволит Typescript проверять тип всех импортируемых библиотек. Вместо этого Typescript будет только проверять тип кода, который вы используете против этих типов. Это означает, что, пока вы не используете несовместимые части импортированных библиотек, они будут хорошо компилироваться.

tl; dr, Да, --skipLibCheck ухудшает проверку типов, и в идеале мы бы ее не использовали. Но не каждая библиотека предоставляет идеальные типы, поэтому ее можно пропустить.