跨文件的Typescript全局变量

时间:2013-06-27 21:07:29

标签: javascript scope typescript

我在.ts文件中创建了一个没有模块或类的变量。它看起来就像一个普通的JavaScript文件。我希望这个变量可以在变量内部的类里面的另一个.ts文件中访问。

例如,我有:

foo.ts

var foo = "some stuff";

bar.ts

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

我不确定这是最好的方法。我尝试过使用window.bar全局,但这似乎不起作用。我是TypeScript跳入更大代码库的新手,所以如果您需要进一步澄清,请告诉我。

谢谢!

2 个答案:

答案 0 :(得分:9)

TypeScript文件不知道您在其他TypeScript文件中所做的任何事情,除非他们有对它们的引用。因此,在bar.ts的顶部,您应该有一行

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

答案 1 :(得分:1)

根据您的问题,不确定它是否是您的编译,IDE或运行时问题。尽管如此,我仍然认为,避免一些全局变量问题的好方法是创建自己的&#34;类型&#34;将文件列在typeRoots的{​​{1}}媒体资源中。

例如,我过去做过的事情就是创建一个console.log的快捷方式,它也会按照我希望的样式为消息着色。像这样......

tsconfig.json

所以我不必在我使用的每个TS文件中const pretty = (style: string, ...anything) => { anything.forEach(something => console.log(`%c ${something} `, style)); return moment().format('[Logged @] HH:MM:SS'); } ,我创建declare var pretty

src/myTypes/globals/index.d.ts

然后在我的tsconfig.json

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

因此,在您的情况下,如果{ "compilerOptions": { ... "typeRoots": ["src/myTypes"] 是您知道在运行时存在的var,您可以在类型文件中简单地foo,在typeRoots中列出它并在所有类型中愉快地使用它没有任何进一步配置的项目文件。