在JavaScript中,我可以这样做:
 something = 'testing';
然后在另一个文件中:
 if (something === 'testing')
它将something被定义(只要它们以正确的顺序被调用).
我似乎无法弄清楚如何在TypeScript中做到这一点.
这就是我尝试过的.
在.d.ts文件中:
interface Window { something: string; }
然后在我的main.ts文件中:
 window.something = 'testing';
然后在另一个文件中:
 if (window.something  === 'testing')
这很有效.但我希望能够失去window.它的一部分,让我的something全球化.有没有办法在TypeScript中做到这一点?
(如果有人感兴趣,我真的想为我的应用程序设置日志记录.我希望能够log.Debug从任何文件调用而无需导入和创建对象.)
我曾经使用以下代码定义全局变量:
interface CustomNodeJSGlobal extends NodeJS.Global {
  myGlobalVariable: unknown
}
export { CustomNodeJSGlobal }
在 Node 14 中,但是当我安装时@types/node(目前是版本 16),它会抛出一个错误Namespace 'NodeJS' has no exported member 'Global'。如何在 Node 16 及以上版本中声明全局变量?
我正在尝试从包类型中扩展命名空间@typings/fullcalendar.
/// <reference path="./types/fullcalendar" />
import * as fullcalendar from 'fullcalendar';
import { TimeGrid } from 'fullcalendar';
// TimeGrid and fullcalendar.views are used then
原件类型可以在这里看到.
而fullcalendar-custom.d.ts是
import * as FC from 'fullcalendar';
export as namespace FC;
declare class TimeGrid { prepareHits() }
declare let views: any;
这会导致类型错误,因此显然fullcalendar没有正确扩展名称空间:
TS2305:模块'".../node_modules/@ types/fullcalendar/index"'没有导出成员'TimeGrid'.
TS2339:类型'typeof".../node_modules/@ types/fullcalendar/index"'上不存在属性'views'.
该如何以正确的方式完成?
可以reference指令来避免在这里,考虑到types目录中指定typeRoots?
该应用程序与Webpack和awesome-typescript-loader捆绑在一起,因此行为可能与其他编译方法不同.在某些时候,IDE检查(WebStorm)中的类型似乎没问题,但在编译时仍然出现类型错误.
我想将我的NodeJS配置存储在全局范围内。
我试图遵循此=> 在node.js和其他Stackoverflow解决方案中扩展TypeScript Global对象,
我制作了一个名为global.d.ts的文件,其中包含以下代码
declare global {
    namespace NodeJS {
      interface Global {
          config: MyConfigType
      }
    }
  }
全局作用域的扩展只能直接嵌套在外部模块或环境模块声明中。ts(2669)
但是这样做很好=>
declare module NodeJS  {
    interface Global {
        config: MyConfigType
    }
}
问题是,我需要导入文件MyConfigType以键入配置,但是第二个选项不允许这样做。
我需要一些强类型的全局变量.
如下所述:在node.js中扩展TypeScript Global对象,为了向global变量添加字段,我需要添加一个扩展Globalnode.d.ts中指定的接口的.d.ts文件.
另外,正如Basarat所说:
您的文件需要清除任何根级别导入或导出.这会将文件转换为模块并将其与全局类型声明命名空间断开连接.
现在,我需要在Global接口上有字段,其类型是我创建的自定义接口:
declare namespace NodeJS{
    interface Global {
        foo: Foo
        bar: Bar
    }
}
我非常不愿意使用这种any类型.
我可以将所有接口声明移动/复制到此声明文件,但这对我来说是一个糟糕的解决方案,因为Foo和Bar反过来会聚合其他接口的许多字段,包括Moment等第三方接口.
我需要一个解决这个悖论的方法