2017-04-18 1 views
0

J'ai cette structure:de d.ts ne peut pas "voir" déclaration de type

dts/ 
    my-types.d.ts 
lib/ 
    a.ts 
    a.d.ts 
    b.ts 
    b.d.ts 

a.ts et b.ts les deux font référence à un certain type, permet d'appeler de ce IFoo. Parce qu'ils partagent IFoo, je veux mettre cette déclaration dans un emplacement partagé, alors j'ai mis IFoo dans dts/my-types.d.ts.

ressemble à ceci:

interface IFoo { 
    [key: string]: any 
} 

a un sens droit?

Mais le problème est que je bien IFoo est reconnu dans a.ts, b.ts et c.ts, une fois mes fichiers de déclaration sont créés, dans

a.d.ts 
b.d.ts 

IFoo ne peut plus être trouvé dans ces fichiers. Par exemple, dans l'un des fichiers d.ts je:

declare var _default: (depList: string[], depContainerObj: IFoo) => Promise<any>; 
export = _default; 

et IFoo ne peut pas être trouvé. Pourquoi donc? Comment puis-je réparer cela?

Voici un indice!

Quand je change ceci:

interface IFoo { 
    [key: string]: any 
} 

à ceci:

export interface IFoo { 
    [key: string]: any 
} 

maintenant la situation est inversée - mes d.ts fichiers peuvent voir l'interface, mais mon fichier .ts ne peut pas! Que se passe-t-il?

Répondre

1

Que se passe-t-il?

Utilisation incohérente du module. S'il vous plaît utiliser des modules partout où c'est possible, pas de globals. Donc, export interface IFoo {

mes fichiers d.ts peuvent voir l'interface, mais mon fichier .ts ne le peut pas! Que se passe-t-il?

Importez le fichier contenant IFoo dans chaque fichier qui en a besoin, par ex. a.ts:

import {IFoo} from "./foo"; 
// now use IFoo 

Plus

Beaucoup a été dit sur les modules https://basarat.gitbooks.io/typescript/content/docs/tips/outFile.html

+0

grâce, donc il semble que je devrais bien utiliser le module, et non pas un espace de noms, parce que mon module sera " externe"? –