当前位置: 首页 > 知识库问答 >
问题:

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

滕祯
2023-03-14

我有一个节点。js应用程序,将一些配置信息附加到global对象:

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

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

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

我不想这样做:

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

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

我不想更改node.d.ts中的声明。我看到了这篇SO帖子,并尝试了以下操作:

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

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

共有3个答案

邢财
2023-03-14

为了避免打字稿声明如下:

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

我建议定义自定义类型。我在我的项目中的< code > src/types/custom . d . ts 文件下执行此操作:

declare global {
  namespace NodeJS {
    interface Global {
        myConfig: {
          a: number;
          b: number;
        }
    }
  }
}

然后我确保 tsconfig.json 文件中的 Typescript 考虑这些:

{
  ...
  "files": [
    ...
    "src/types/custom.d.ts"
  ]
}

现在您可以安全地使用自定义属性:

console.log(global.myConfig.a);
高晋
2023-03-14

截至<代码>node@16节点JS。全局接口已被删除,取而代之的是globalThis

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

declare global {
  var NEW_GLOBAL: string;
}

在非模块文件(无顶级导入/导出)中,如下所示:

declare var NEW_GLOBAL: string;

重要说明:变量必须声明为 varletconst 变量不会显示在 globalThis 上。

韩涵衍
2023-03-14

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

您可能有类似< code>vendor.d.ts的内容:

// some import 
// AND/OR some export

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

您的文件需要清除任何根级别的导入导出。这会将文件转换为模块,并将其与全局类型声明命名空间断开连接。

更多:https://basa rat . git books . io/typescript/content/docs/project/modules . html

 类似资料:
  • 问题内容: 我有一个node.js应用程序,该应用程序将一些配置信息附加到该对象: TypeScript编译器不喜欢这样,因为该类型没有名为的对象: TS2339:类型“ Global”上不存在属性“ myConfig”。 我不想这样做: 如何扩展类型以包含或只是告诉TypeScript关闭并信任我?我希望第一个。 我不想更改其中的声明。我看到了这样的帖子,并尝试了这个: 作为扩展现有接口的一种方

  • 主要内容:全局对象与全局变量,__filename,__dirname,setTimeout(cb ms),clearTimeout(t),setInterval(cb ms),console,processJavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 globa

  • JavaScript 中有一个特殊的对象,称为全局对象(Global Object),它及其所有属性都可以在程序的任何地方访问,即全局变量。 在浏览器 JavaScript 中,通常 window 是全局对象, 而 Node.js 中的全局对象是 global,所有全局变量(除了 global 本身以外)都是 global 对象的属性。 在 Node.js 我们可以直接访问到 global 的属性

  • 问题内容: 我正在使用0.3.1-pre Node.js 这样做: 结果是 但是,在键入“全局”后在控制台中按[Tab]时。给出函数列表,包括parseInt。 那么parseInt是否是 全局 名称空间的成员? 问题答案: 显然,该对象不是浏览器中的全局对象。(根据#nodejs @ freenode中的micheil)实际上仅在内部使用。关于全球关闭的信息。 并且和所有的好友都在自己的全局。不

  • 问题内容: 我对大规模服务器端开发还不陌生。我想使用Node.js编写服务器,但在继续前进之前,我想知道将节点扩展到每秒20个查询的一般原则是什么。 我正在编写的服务将主要是数据库的接口,以及对输入数据的身份验证和确认。 问题答案: 负载均衡 对于最简单的网站,您很可能根本不需要任何扩展。只需一个盒子就能让您覆盖。之后,您应该进行负载平衡,就像您提到的那样,每种架构几乎都是相同的(就像您所说的,您

  • 这一章,我们将学会如何在PHP扩展中使用全局变量。 在扩展中定义全局变量 首先,我们需要在扩展的头文件中(默认是php_*.h)中定义所有的全局变量。举个例子,比如我们要定义一个无符号的long类型的全局变量,我们可以这样定义: ZEND_BEGIN_MODULE_GLOBALS(sample4) unsigned long counter; ZEND_END_MODULE_GLOBALS