2013-06-27 196 views
5

我在沒有模塊或類的.ts文件中創建了一個變量。它大多看起來就像一個普通的JavaScript文件。我希望這個變量可以在另一個.ts文件裏面的變量裏面的類中訪問。跨文件的Typescript全局變量

因此,例如,我有:

foo.ts

var foo = "some stuff"; 

bar.ts

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

我不知道這是做的最好的方法它。我試過使用window.bar全局,但似乎沒有工作。我是新來的TypeScript跳入一個更大的代碼庫,所以請讓我知道,如果你需要任何進一步的澄清。

謝謝!

回答

8

TypeScript文件不知道您在其他TypeScript文件中所做的任何操作,除非它們有對它們的引用。所以在bar.ts頂部,你應該有一個線

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

我是否需要'聲明var foo:any;'呢? – Nolski

+1

沒有。 Declare是爲了確保編譯器有一些東西會存在,它不知道。通常是由第三方庫加載的東西。編譯器會知道foo,因爲它會引用它創建的文件。 –

+0

太棒了。這個答案幫助我清除了很多問題。謝謝! – Nolski

0

從你的問題,不知道這是否是你有一個編譯,IDE或運行時的問題。儘管如此,我還是認爲,避免使用全局變量的一些問題的一個好方法是創建自己的「類型」文件,並將其列在您的tsconfig.jsontypeRoots屬性中。

例如,我在過去做過的事情是創建一個console.log的快捷方式,它也使用我希望的樣式爲消息着色。是這樣的...

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

所以我不必在每個declare var pretty TS文件我用它,我會創造

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

然後在我的tsconfig.json

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

所以,你的情況,如果foo是,你知道會出現在運行時,你可以在你的類型只是declare var foo: string;提交變種,在你typeRoots和使用它列它高興地在你所有的項目文件中沒有任何進一步的配置。