2013-06-27 17 views
5

Ho creato una variabile in un file .ts che non ha modulo o classe. Sembra quasi un semplice file JavaScript. Voglio che questa variabile sia accessibile in un altro file .ts all'interno di una classe che si trova all'interno di una variabile.Variabile globale dattiloscritto tra i file

Così, per esempio ho:

foo.ts

var foo = "some stuff"; 

bar.ts

module Bar { 
    export class BarClass { 
     function getFoo() { 
      return foo; 
     } 
    } 
} 

Non sono sicuro che questo è il modo migliore per farlo esso. Ho provato a usare window.bar global ma non sembra funzionare. Sono nuovo di TypeScript che salta in un codebase più grande quindi per favore fatemi sapere se avete bisogno di ulteriori chiarimenti su qualsiasi cosa.

Grazie!

risposta

8

I file TypeScript non conoscono nulla di ciò che è stato fatto in altri file TypeScript a meno che non abbiano un riferimento ad essi. Così in cima bar.ts si dovrebbe avere una linea

/// <reference path="foo.ts" /> 
+2

Dovrei fare 'dichiarare var foo: any;' too? – Nolski

+1

No. Declare serve a garantire al compilatore che qualcosa stia per esistere, che altrimenti non saprebbe. Di solito qualcosa caricato da una libreria di terze parti. Il compilatore conoscerà foo perché avrà un riferimento al file in cui è stato creato. –

+0

Fantastico. Questa risposta mi ha aiutato a chiarire molti problemi. Grazie! – Nolski

0

Dalla tua domanda, non so se fosse un problema di compilazione, IDE o runtime che hai avuto. Tuttavia, ho pensato che avrei condiviso che un buon modo per evitare alcuni di questi problemi con i globals è quello di creare il proprio file "tipi" ed elencarlo nella proprietà typeRoots nel proprio tsconfig.json.

Ad esempio, qualcosa che ho fatto in passato è creare un collegamento a console.log che colora anche i messaggi con uno stile che desidero. In questo modo ...

const pretty = (style: string, ...anything) => { 
    anything.forEach(something => 
    console.log(`%c ${something} `, style)); 
    return moment().format('[Logged @] HH:MM:SS'); 
} 

Quindi non c'è bisogno di declare var pretty in ogni TS lima lo uso, mi piacerebbe creare

... 
declare function pretty(style: string, ...anything); 
... 

E poi nel mio tsconfig.json

{ 
    "compilerOptions": { 
    ... 
    "typeRoots": ["src/myTypes"] 

Quindi, nel tuo caso, se foo fosse una var che sai sarebbe lì in runtime potresti semplicemente declare var foo: string; nel tuo file di tipi, elencarlo nel tuo tipoRoots e usare felicemente in tutti i tuoi file di progetto senza ulteriori configurazioni.