Est-il judicieux d'utiliser «export» dans un fichier «d.ts»?

Aug 06 2020

J'essaye de créer un fichier pour les types qui sont globalement utilisés autour de mon application.

reduxState.d.ts

declare namespace MyProject {
  type Type1 = someType;
  interface SomeInterface {
    someProperty: someType
  }
}

Avec le code ci-dessus, je peux déjà voir mon namespaceet ses membres disponibles dans mes fichiers de projet.

Alors, quelle est la différence entre le code ci-dessus et le code suivant, qui utilise exportpour les namespacemembres?

declare namespace MyProject {
  export type Type1 = someType;
  export interface SomeInterface {
    someProperty: someType
  }
}

Ils semblent tous les deux fonctionner très bien. Quelle est la différence?

De: https://www.typescriptlang.org/docs/handbook/namespaces.html#namespacing

Parce que nous voulons que les interfaces et les classes ici soient visibles en dehors de l'espace de noms, nous les précédons avec export.

Dans cet extrait du DOC, il semble qu'ils se réfèrent à un namespacequi est déclaré dans tsun d.tsfichier et non dans un fichier. Est-ce pour cela que vous avez besoin du exportdans ce cas?

Est-il vraiment judicieux d'utiliser exportdans un d.tsfichier?

Réponses

1 Zer0 Aug 06 2020 at 18:50

*.d.tsles fichiers sont pour la définition, ils sont complètement ignorés au moment de l'exécution. Si vous écrivez du code JS parce que vous avez une bibliothèque ou quelque chose du genre, je vous recommande fortement d'utiliser le mot-clé d'exportation, car cela permet aux autres utilisateurs de voir plus facilement ce qu'ils pourront utiliser à partir de votre code (ce que vous ne export, ne peut être importé ailleurs évidemment).

Maintenant, votre cas d'utilisation: tout ce qui est exporté à partir d'un espace de nom peut être utilisé en dehors de indépendamment. Cela signifie que vous pourriez faire quelque chose comme

const obj: MyProject.SomeInterface = { someProperty: 20 };

Puisque vous utilisez des *.d.tsfichiers et non des *.tsfichiers, cela ne fera aucune différence pour vous tant que vous n'exportez que des interfaces, car elles seraient de toute façon omises au moment de la compilation.

Une dernière remarque: les *.d.tsfichiers vous permettent de voir vos éléments dans tout votre projet, mais si vous prévoyez d'importer des fonctions ou similaires à partir de là, vous devez d'abord les importer évidemment.