2013-06-27 13 views
5

Ich erstellte eine Variable in einer .ts-Datei, die kein Modul oder Klasse hat. Es sieht meistens wie eine normale JavaScript-Datei aus. Ich möchte, dass diese Variable in einer anderen .ts-Datei innerhalb einer Klasse zugänglich ist, die innerhalb einer Variablen liegt.Typescript Global Variable über Dateien

So zum Beispiel habe ich:

foo.ts

var foo = "some stuff"; 

bar.ts

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

Ich bin nicht sicher, ob dies der beste Weg ist, zu tun es. Ich habe versucht, die window.bar global zu verwenden, aber das scheint nicht zu funktionieren. Ich bin neu in TypScript, das in eine größere Codebasis springt. Bitte lassen Sie es mich wissen, wenn Sie weitere Informationen benötigen.

Danke!

Antwort

8

TypeScript-Dateien wissen nichts über alles, was Sie in anderen TypeScript-Dateien getan haben, es sei denn, sie haben einen Verweis darauf. So an der Spitze der bar.ts sollten Sie

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

Müsste ich 'declare var foo: any;' too? – Nolski

+1

Nein. Declare dient dazu, dem Compiler zu versichern, dass etwas existieren wird, von dem es sonst nichts weiß. Normalerweise wird etwas von einer Drittanbieter-Bibliothek geladen. Der Compiler wird über foo wissen, da er einen Verweis auf die Datei hat, in der er erstellt wurde. –

+0

Ehrfürchtig. Diese Antwort hat mir geholfen, viele Probleme zu lösen. Vielen Dank! – Nolski

0

Aus Ihrer Frage eine Linie haben, nicht sicher, ob es sich um eine Zusammenstellung, IDE oder Runtime Problem war, die Sie hatten. Dennoch, dachte ich mir, dass eine gute Möglichkeit, einige dieser Probleme mit Globals zu vermeiden, darin besteht, Ihre eigene "Dateityp" -Datei zu erstellen und sie in Ihrer typeRoots-Eigenschaft in Ihrer tsconfig.json aufzulisten.

Zum Beispiel habe ich in der Vergangenheit eine Verknüpfung zu console.log erstellt, die auch Nachrichten mit einem gewünschten Stil einfärbt. Wie so ...

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

So habe ich nicht zu declare var pretty in jedem TS-Datei ich es verwenden, würde ich

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

erstellen und dann in meinem tsconfig.json

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

Also, in Ihrem Fall, wenn foo war eine Var, die Sie wissen, wäre in Laufzeit könnten Sie einfach declare var foo: string; in Ihrem Typ Datei, listen Sie es in Ihrem TypRoots und verwenden es freut sich in all deinen Projektdateien ohne weitere Konfiguration.

Verwandte Themen