在 node.js 中扩展 TypeScript 全局对象

新手上路,请多包涵

我有一个 node.js 应用程序,它将一些配置信息附加到 global 对象:

 global.myConfig = {
    a: 1,
    b: 2
}

TypeScript 编译器不喜欢这样,因为 Global 类型没有名为 myConfig 的对象:

TS2339:“全局”类型上不存在属性“myConfig”。

我不想这样做:

 global['myConfig'] = { ... }

如何扩展 Global 类型以包含 myConfig 或者只是告诉 TypeScript 闭嘴并相信我?我更喜欢第一个。

我不想更改 node.d.ts 中的声明。我看到了这个 SO 帖子 并尝试了这个:

 declare module NodeJS  {
    interface Global {
        myConfig: any
    }
}

作为扩展现有 Global 接口的一种方式,但它似乎没有任何效果。

原文由 d512 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.9k
2 个回答

我看到了这个 SO 帖子并尝试了这个:

你可能有类似 vendor.d.ts 的东西:

 // some import
// AND/OR some export

declare module NodeJS  {
    interface Global {
        spotConfig: any
    }
}

您的文件需要 清除 任何根级别 importexports 。这会将文件变成一个 模块 并断开它与 全局类型声明命名空间 的连接。

更多: https ://basarat.gitbooks.io/typescript/content/docs/project/modules.html

原文由 basarat 发布,翻译遵循 CC BY-SA 3.0 许可协议

node@16NodeJS.Global 接口 已被删除,取而代之的是 globalThis

您可以在模块文件中将新的全局变量声明为:

 declare global {
  var NEW_GLOBAL: string;
}

在非模块文件(无顶级导入/导出)中为:

 declare var NEW_GLOBAL: string;

重要说明:变量必须声明为 varletconst 变量未显示在 globalThis

原文由 aleksxor 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题