62 votes

Typescript 2.0. champ "types" dans tsconfig.json

Je ne comprends pas le sens de types domaine tsconfig.json . Dans la documentation, j'ai lu ce texte:

 "types": {
  "description": "Type declaration files to be included in compilation. Requires TypeScript version 2.0 or later.",
  "type": "array",
  "items": {
    "type": "string"
  }
},
 

Pour autant que je sache si j'installe @types/express je devrais ajouter cette chaîne dans tsconfig.json

 {
  "compilerOptions": {
     ...
     "types": ["lodash"]
   }
} 
 

mais tout fonctionne bien sans cela. Et maintenant je ne comprends pas pourquoi j'ai besoin du champ types

149voto

Vlad Jerca Points 1066

De la Machine 2.* le " tsconfig.json " a les deux propriétés suivantes disponibles:

{
    'typeRoots': [],
    'types': [] 
}

Je vais vous décrire en détail à la fois dans l'ordre.


  1. 'typeRoots' indique la racine de dossiers dans lesquels les transpiler devriez regarder pour des définitions de type (exemple: 'node_modules').

    • Si vous avez été à l'aide de la machine, vous savez que pour différentes bibliothèques qui n'ont pas été écrites à l'aide de la machine, vous avez besoin de définitions pour le compilateur de reconnaître les variables globales et d'avoir l'assistance IntelliSense.

    • Cette question a été abordée par les projets (repos) comme " DefinatelyTyped qui utilisent des outils tels que le dnt ou typings module à télécharger typings nécessaires à votre projet, mais ils viennent aussi avec leur propre 'json' fichier qui doit être conservé séparément.

    • Avec TS2.* vous pouvez maintenant chercher la définition des dépendances à l'aide de 'npm'. Donc, au lieu d'utiliser une autre cli bibliothèque comme dnt ou typings, vous pouvez maintenant simplement utiliser: npm i @types/{LIB} de cette façon, toutes les dépendances sont gérées à l'aide du package.json et vous pouvez facilement éliminer la nécessité d'un autre 'json' fichier à conserver dans votre projet.


  1. "types" sont les vrais noms de bibliothèque qui se trouve dans le typeRoot.

    • donc, disons que vous avez la configuration par défaut pour typeRoots qui ressemblerait à quelque chose comme:

      "typeRoots": [
          "./node_modules/@types"
      ]
      
    • disons que vous souhaitez désormais utiliser le jasmin comme un framework de test pour votre projet, si vous avez votre typeRoot dossier configuré, vous avez trop à faire maintenant est d'exécuter la commande: npm i @types/jasmine --save-dev

    • après la définition de package est installé, vous avez juste besoin de configurer votre "types" maison " tsconfig.json " comme suit:

      "types": [
           "core-js",
           "jasmine",
           "requirejs",
           "chance"
      ]
      

Pour conclure, fondamentalement, vous dire le TS compilateur suivantes:

typeRoots: Vous devez regarder pour typings dans ces dossiers. types: Dans l'un des dossiers fournis ci-dessus, vous trouverez les définitions de ces cadres conceptuels (sous-dossiers).

Donc, en utilisant le scénario ci-dessus, et si nous ajoutons un autre racine:

"typeRoots": [
    "./node_modules/@types",
    "./custom_definitions"
],
"types": [
    "jasmine",
]

TS va maintenant chercher les fichiers de définition dans

./node_modules/@types/jasmine

ou

./custom_definitions/jasmine

Espérons que cette aide!

41voto

Xcalibur Points 1312

Vous n'avez pas besoin de les types de champ nécessairement. Ici est la partie importante de la note de la documentation:

Par défaut, tous visibles "@" types de paquets sont inclus dans votre la compilation. Les Packages dans node_modules/@les types de toutes les entourant de dossier sont considérés comme visible

Donc, si vous avez suivi une convention ou un ensemble d'outils tels que les mnp à télécharger @types de paquets, vous n'avez pas besoin de configurer typeRoots ou de types dans votre configuration, car il sera de travailler hors de la boîte avec la structure de dossiers par défaut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X