web-dev-qa-db-fra.com

Utilisation de l'argument du compilateur TypeScript 'skipLibCheck'

J'ai fait des recherches pour une explication supplémentaire de l'argument du compilateur TypeScript skipLibCheck pour déterminer la sécurité d'avoir cet ensemble à true =. L'explication la plus approfondie que j'ai trouvée est la suivante:

Le nouveau --skipLibCheck TypeScript 2.0 ajoute une nouvelle option de compilateur --skipLibCheck qui provoque la vérification de type des fichiers de déclaration (fichiers avec l'extension .d.ts). Lorsqu'un programme inclut des fichiers de déclaration volumineux, le compilateur passe beaucoup de temps à vérifier les déclarations de type qui sont déjà connues pour ne pas contenir d'erreurs, et les temps de compilation peuvent être considérablement raccourcis en ignorant les vérifications de type de fichier de déclaration.

Étant donné que les déclarations dans un fichier peuvent affecter la vérification de type dans d'autres fichiers, certaines erreurs peuvent ne pas être détectées lorsque --skipLibCheck est spécifié. Par exemple, si un fichier de non-déclaration augmente un type déclaré dans un fichier de déclaration, des erreurs peuvent se produire qui ne sont signalées que lorsque le fichier de déclaration est vérifié. Cependant, dans la pratique, de telles situations sont rares.

Je comprends que vous obtenez évidemment un avantage en termes de performances du compilateur n'ayant pas à taper des fichiers de vérification qui sont considérés comme ne contenant pas d'erreurs, mais j'ai vu cet indicateur utilisé pour contourner les erreurs émises par le compilateur par rapport aux fichiers de déclaration ayant problèmes.

Sûrement, utiliser ce drapeau pour contourner cela diminue l'intégrité du typage de votre application?

16
Daniel Lowman

Pour paraphraser la question de manière laconique:

Sûrement [l'activation de skipLibCheck] diminue l'intégrité du typage de votre application?

Je conviens que oui, c'est le cas. Cependant, si l'alternative est une application qui ne compile pas, elle devient alors un indicateur pratique.

Alors que TypeScript lui-même est assez mature, la communauté TypeScript est encore relativement jeune. Des définitions de types sont disponibles pour des tonnes de bibliothèques, et même pour certaines bibliothèques TypeScript natives, mais elles peuvent être incompatibles entre elles pour diverses raisons.

Vous pouvez importer une bibliothèque dont le typage est construit avec un tsconfig moins strict que vous ne le souhaiteriez - dont votre compilateur pourrait se plaindre lorsque vous essayez de l'utiliser.

Vous pouvez trouver deux bibliothèques définissant les mêmes types, mais de manière incompétente. J'ai importé des bibliothèques qui fournissaient leurs propres typages pour un Polyfill de Buffer, et toute mon application ne parviendrait pas à se compiler en raison de leur incompatibilité.

Activation de --skipLibCheck peut vous aider à contourner ces problèmes. L'activer empêchera TypeScript de vérifier le type de l'ensemble des bibliothèques importées. Au lieu de cela, TypeScript vérifie uniquement le code que vous utilisez par rapport à ces types. Cela signifie que tant que vous n'utilisez pas les parties incompatibles des bibliothèques importées, elles se compileront très bien.

tl; dr, Oui, --skipLibCheck dégrade la vérification de type, et idéalement nous ne l'utiliserions pas. Mais toutes les bibliothèques ne proposent pas encore de types parfaits, donc sauter peut être agréable.

5
ProdigySim