2013-06-27 108 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和使用它列它高兴地在你所有的项目文件中没有任何进一步的配置。