web-dev-qa-db-fra.com

Dois-je référencer la définition TypeScript dans chaque fichier?

Existe-t-il un moyen de dire à TypeScript d'utiliser un certain fichier (ou ensemble de fichiers) comme définition de tout ce qui a été compilé?

Ma seule alternative actuellement consiste à ajouter quelque chose comme ceci dans chaque fichier TypeScript (ce qui semble maladroit):

/// <reference path="DefinitelyTyped/requirejs/require.d.ts" />
39
HotStuff68

Lorsque vous utilisez le système de module interne de TypeScript, vous pouvez éviter toute balise <reference> dans le code. Personnellement, je le fais parce que je ne veux pas encoder de chemins (réels ou absolus) dans le code car je déplace constamment des choses.

Pour ce faire, vous pouvez vous assurer que tous les fichiers de déclaration et les fichiers source TypeScript requis sont transmis au compilateur sous forme d'arguments lors de la compilation.

L'utilisation de gulp avec gulp-TypeScript simplifie cette tâche. Vous pouvez définir noExternalResolve dans gulp-TypeScript sur true et créer des tâches gulp qui prennent tous vos fichiers .d.ts avec vos sources et les transmettent au compilateur. Lorsque vous insérez tsd dans votre pile, il vous suffit de transmettre le fichier tsd.d.ts contenant les références à tous les autres fichiers de définition installés via tsd.

UPDATE pour TypeScript> = v1.5: vous pouvez utiliser un fichier tsconfig.json , et le compilateur obtiendra le bon ordre des classes. Cela supprime la nécessité d'utiliser gulp-TypeScript dans son ensemble. Vous pouvez choisir de répertorier explicitement tous les fichiers dans le fichier tsconfig.json ou omettre complètement la propriété files pour inclure tous les fichiers *.ts/*.tsx dans le répertoire où réside le tsconfig.json (y compris tous les sous-dossiers).

Un exemple de tsconfig.jsonpeut ressembler à ceci:

{
    "compilerOptions": {
        "target": "ES5",
        "module": "commonjs",
        "lib": [ "es5", "es2015.promise", "dom" ]
    },
    "include": [
        "src/**/*.ts"
    ]
}
33
Dynalon

Ce que j’ai appris jusqu’à présent, c’est que /// <référence> -ing un module avec des commentaires de référence n’est pas une bonne méthode.

Par exemple, si vous avez un fichier Foo et un fichier Bar. Les deux fichiers utilisent jquery, mais seul le fichier Foo contient un commentaire de référence pour jquery. Si le fichier Foo est supprimé pour une raison quelconque, votre fichier Bar est cassé, car la référence est manquante.

Si vous utilisez TypeScript> = 2.0, il est préférable de définir les fichiers de définition TypeScript (.d.ts) dans votre tsconfig.json sous la section "fichiers" .

Cela pourrait ressembler à ceci:

{
  "compileOnSave": true,
  "compilerOptions": {
    "noImplicitAny": true,
    "noEmitOnError": true,
    "removeComments": false,
    "sourceMap": true,
    "target": "es5", 
    "outDir": "./Scripts/"
  },
  "files": [
    "./src/foo.ts",
    "./src/bar.ts",
    "./Scripts/typings/jquery/jquery.d.ts",
    "./Scripts/typings/jqueryui/jqueryui.d.ts",
    "./Scripts/MicrosoftMaps/Microsoft.Maps.d.ts"
  ]
}

L'utilisation de la directive /// (commentaires de référence) est souvent utilisée dans les exemples pour vous permettre de démarrer rapidement, mais ce n'est pas une pratique recommandée. De nombreux exemples proviennent également d'une version <TypeScript 2.0.

10
juFo

Cette question est un doublon des définitions de référence TypeScript dans un seul fichier, au lieu de tous les fichiers JS?

La réponse est, pour le moment, ajoutez chaque fichier que vous souhaitez référencer à la section "fichiers" de votre fichier tsconfig.json. C'est encore beaucoup de lignes, mais tout dans un fichier.

À l'avenir, lorsque TypeScript 2 sera disponible, vous pourrez alors utiliser la section "filesGlob" et résoudre le problème en deux lignes.

3
Richard

Certains IDE détectent automatiquement tous les fichiers d'un projet (Visual Studio).

Pour tout le reste, vous pouvez créer un fichier _references.ts et y mettre tous vos commentaires de référence. Vous n'aurez alors qu'à ajouter:

/// <reference path="_references.ts" />

... à chaque fichier (au lieu de plusieurs).

Votre IDE peut également prendre en charge fichiers tsconfig .

3
Fenton

J'ai récemment commencé à utiliser TypeScript et, comme j'ai bien compris la résolution des modules internes, vous pouvez compiler tous les fichiers .ts à partir du répertoire tsconfig.json et de tous ses sous-répertoires, à condition que vous n'ayez pas défini les fichiers .ts sans /// <references path="" />. .

Mais l'ordre dans lequel les fichiers .ts sont compilés en fichiers .js résultants n'est pas déterminé par les dépendances des fichiers (ou des classes qu'ils contiennent). Il est donc possible que la classe enfant soit compilée avant la classe parent (l'enfant hérite de la relation parent). Ensuite, le code ne fonctionnera pas, même s'il a été compilé avec succès. Il se plaindra de ne pas comprendre la classe parent au sein de la classe enfant. Par conséquent, vous devez ajouter un /// <references path="" /> comme indicateur au compilateur pour résoudre les dépendances entre les fichiers .ts.

C'est ce que veut la documentation TypeScript:

La directive /// est la plus courante de ce groupe. Il sert de déclaration de dépendance entre fichiers.

Les références en triple barre indiquent au compilateur d'inclure des fichiers supplémentaires dans le processus de compilation.

Ils servent également de méthode pour ordonner la sortie lorsque vous utilisez --out ou --outFile. Les fichiers sont émis à l'emplacement du fichier de sortie dans le même ordre que celui entré après le prétraitement.

0
Cika Raki