web-dev-qa-db-fra.com

Autoriser implicitement uniquement pour les fichiers de définition

J'utilise TypeScript avec l'option "noImplicitAny": true définie dans mon tsconfig.json.

J'utilise typings pour gérer les fichiers de définition de type et les inclut à l'aide d'une directive de chemin de référence dans le point d'entrée de mon application:

/// <reference path="./typings/index.d.ts" />

Le problème est que certains fichiers de définition reposent sur des noms implicites, de sorte que je reçois maintenant de nombreuses erreurs de compilation à partir des fichiers .d.ts.

Existe-t-il un moyen de désactiver/de supprimer ces erreurs, par exemple en fonction du chemin ou du type de fichier?

15
Tom Fenech

Avec la sortie de TypeScript 2.0, l'option skipLibCheck compiler a été introduite et devrait résoudre votre problème:

TypeScript 2.0 ajoute une nouvelle option du compilateur --skipLibCheck qui permet d'ignorer 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 à des déclarations de contrôle de type dont on sait déjà qu'elles ne contiennent pas d'erreurs, et les temps de compilation peuvent être considérablement raccourcis en ignorant les contrôles 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 survenir et ne sont signalées que lorsque le fichier de déclaration est vérifié. Cependant, dans la pratique, de telles situations sont rares.

La valeur par défaut est false et peut être activé dans votre tsconfig.json:

{
    "compilerOptions": {
        "skipLibCheck": true,
        ...
    },
    ...
}
17
cartant

si vous avez besoin d'autoriser implicitement tout sur une seule ligne d'importation, vous pouvez utiliser l'attribut //@ts-ignore juste avant l'importation du module non typé , il ignorera l'implicite any (ainsi que toutes les autres erreurs possibles de la ligne suivante, de sorte c’est à vous de le corriger) mais c’est très facile et cela résout beaucoup de maux de tête en un rien de temps

par exemple pour la police génial 5 j'ai

//@ts-ignore
import fontawesome from '@fortawesome/fontawesome';
//@ts-ignore
import regular from '@fortawesome/fontawesome-free-regular';

fontawesome.library.add(regular);

de plus, cela fonctionne bien avec webpack

1
Mosè Bottacini