Que fait ‘declare’ do dans ‘exporter déclarer des actions de classe’?

Pourquoi avons-nous besoin de declare dans la déclaration?

 export declare class Actions { ... } 

trouvé ce que je cherchais:

Déclarer vs var

var crée une nouvelle variable. declare est utilisé pour indiquer à TypeScript que la variable a été créée ailleurs. Si vous utilisez declare , rien n’est ajouté au code JavaScript généré – c’est simplement un indice pour le compilateur.

Par exemple, si vous utilisez un script externe qui définit var externalModule , utilisez declare var externalModule pour indiquer au compilateur TypeScript que externalModule a déjà été configuré.

Pour comprendre cela, vous devez d’abord comprendre le mot clé “declare”.

Voici une bonne explication du blog de Gil Fink :

Le mot-clé TypeScript declare est utilisé pour déclarer des variables qui ne proviennent peut-être pas d’un fichier TypeScript.

Par exemple, imaginons que nous avons une bibliothèque appelée myLibrary qui ne possède pas de fichier de déclaration TypeScript et qui possède un espace de noms appelé myLibrary dans l’espace de noms global. Si vous souhaitez utiliser cette bibliothèque dans votre code TypeScript, vous pouvez utiliser le code suivant:

 declare var myLibrary; 

Le type que le runtime TypeScript donnera à la variable myLibrary est le type any. Le problème ici est que vous n’aurez pas Intellisense pour cette variable au moment du design, mais vous pourrez utiliser la bibliothèque dans votre code. Une autre option pour avoir le même comportement sans utiliser le mot-clé declare consiste à utiliser une variable de n’importe quel type:

 var myLibrary: any; 

Les deux exemples de code produiront la même sortie JavaScript mais l’exemple de déclaration est plus lisible et exprime une déclaration ambiante.


Donc, après avoir compris le mot-clé “declare”, retournez à l’endroit où vous trouvez le mot

 export declare class Action{ ... } 

L’implémentation réelle de la classe est probablement ailleurs – peut-être un fichier .js.

Le mot-clé declare dans ce cas spécifique:

 export declare class Actions { ... } 

… est apparemment inutile et je pense que TypeScript devrait peut-être en faire une erreur (je ne sais pas s’il y a une raison cachée). Si vous déclarez une classe, vous n’aurez jamais besoin de l’importer. Si vous exportez une classe qui attend que quelqu’un l’importe, vous n’avez pas besoin de la déclarer. Pour aggraver les choses, parce que vous déclarez cette classe, par définition, cette classe doit être utilisable sans avoir à l’importer. Mais ce n’est pas vrai lorsque vous exportez déclarer une classe. Vous devez l’ importer pour l’utiliser.

TL; DR

 export declare class Actions { ... } 

est le même que

 export class Actions { ... }