2016-11-24 1 views
5

Je suis novice en TypeScript et plus je lis sur les modules et les espaces de noms, plus ça me rend confus. Dois-je aller avec des modules? Dois-je aller avec des espaces de noms? devrais-je utiliser les deux? Aidez-moi!Organisation TypeScript: espaces de noms? modules? confusion

J'ai des fichiers javascript (.js) que j'essaie de convertir en TypeScript. Il existe un fichier .js avec certaines fonctions générales et un fichier .js avec certaines fonctions spécifiques aux filtres. Maintenant, je voudrais organiser cela un peu plus avec TypeScript, comme je le ferais normalement avec C#.

Est-ce un usage correct ou comment devrait-il être organisé? Je n'utilise pas de module, devrais-je? (Comment?)

Company.ts

namespace Company { 

    // nothing yet, but in future it might. 

} 

Company.Project.ts

namespace Company.Project { 

    import Company; // like this? 

    let myVar : string = "something"; 

    export function handyGeneralFunction1(foo, bar) { 
    // ... 
    } 

    export function handyGeneralFunction2(foo, bar, foo, bar) { 
    // ... 
    doInternalCalc(); 
    // ... 
    } 

    export function handyGeneralFunction3() { 
    // ... 
    } 

    function doInternalCalc() { 
    // ... 
    } 
} 

Company.Project.Filter.ts

namespace Company.Project.Filter { 

    import Project = Company.Project; // like this? 

    export function initializeFilter() { 
     // ... 
     initMetadata(); 
     // ... 
    } 

    function initMetadata() { 
     // ... 
     Project.handyGeneralFunction3(); 

     let helper : FilterHelper = new FilterHelper("aaaa,bbbb"); 
     let res:string[] = helper.parseData(); 
    } 

    function foo() { 
     // ... 
     let x :string = Project.myVar + " else"; // can I use myVar here? 
    } 

    // a class in the namespace 
    export class FilterHelper { 

     data: string; 

     constructor(theData: string) { 
      this.data = theData; 
     } 

     parseData() : string[] { 
      // ... 
      return new Array<string>(); 
     } 
    } 

} 

Répondre

1

Si vous avez la possibilité d'améliorer réellement la structure du projet, vous devez absolument choisir des modules plutôt que des espaces de noms. Selon la taille du projet, cela peut nécessiter quelques efforts.

L'introduction d'espaces de noms peut être utile si votre application n'est pas très volumineuse et que vous ne voulez pas investir dans le passage à un autre système de construction capable de gérer de vrais modules. Utiliser des espaces de noms n'est pas beaucoup plus que certaines variables globales nommées qui contiennent les fonctions et les variables. Cela peut devenir confus dès que vous n'avez pas de structures de dépendance appropriées. Vous devez prendre soin d'importer tous les fichiers dans le bon ordre pour que les espaces de noms fonctionnent correctement. La syntaxe d'importation que vous avez utilisée peut même être omise, car vous ne faites référence à un autre objet global, qui doit être initialisé à ce moment-là. Donc, les espaces de noms pourraient être votre première étape si vous n'avez pas la possibilité de faire des changements plus importants sur votre base de code. Pour une installation à l'épreuve du temps, je suggèrerais certainement d'utiliser de vrais modules. Mais sachez que cela ne vient pas gratuitement.

Pour plus d'informations, je suggère d'avoir un regard sur le commentaire officiel sur ce sujet à https://www.typescriptlang.org/docs/handbook/namespaces-and-modules.html ou la section dactylographiée Deep Dive à https://basarat.gitbooks.io/typescript/content/docs/project/namespaces.html

+0

pouvez-vous donner un exemple de la façon dont ce code ressemblerait avec des modules? comme je n'ai jamais utilisé de modules en javascript ou en tapuscrit. (première fois en fait que j'utilise des espaces de noms en javascript). – juFo