跨文件键入全局变量

Typescript Global Variable across Files

本文关键字:全局变量 文件      更新时间:2023-09-26

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

例如,我有:

foo.ts

var foo = "some stuff";

bar.ts

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

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

谢谢!

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

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

根据您的问题,不确定是编译、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');
}

所以我不必在我使用的每个TS文件中都使用declare var pretty,我会创建src/myTypes/globals/index.d.ts

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

然后在我的tsconfig.json 中

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

因此,在您的情况下,如果foo是一个您知道在运行时会存在的var,您可以简单地在类型文件中使用declare var foo: string;,将其列在typeRoots中,并在所有项目文件中愉快地使用它,而无需任何进一步的配置。