如何在NodeJS Express中在global.d.ts文件中声明服务

wwwo4jvm  于 2023-05-28  发布在  Node.js
关注(0)|答案(1)|浏览(155)

我有一个NodeJS Express项目,其中包括一个名为UtilServices.ts的服务,我想在global.d.ts文件中声明这个服务,以便能够在项目中全局使用它,而无需在每个使用它的地方导入它。
我试图这样做,但我在运行时得到一个错误,服务没有定义,虽然也没有构建错误。
以下是我的代码:
global.d.ts文件:

import { UtilService } from './src/services/utilService';
declare global {
    var UtilService: UtilService;
}

下面是我的tsconfig:

{
  "compilerOptions": {
    "target": "es5",
    "module": "commonjs",
    "declaration": true,
    "outDir": "dist"
  },
"files": ["global.d.ts", "./src/app.ts"]
}

我直接在我想使用它的地方调用服务,如下所示:

UtilService.doSomeThing();

我在运行时得到一个错误,即UtilService未定义,尽管也没有构建错误。
我想知道我的代码中是否有任何错误或任何遗漏的代码或配置。

0qx6xfy6

0qx6xfy61#

可以在global对象上创建UtilService特性,并将UtilService对象指定给该特性。
一个工作示例使用node v14.19.3
services/utilService.ts

const UtilService = {
  doSomething() {
    return 'do something'
  }
}

export { UtilService }

setup.ts

import { UtilService } from './services/utiService';

declare global {
  namespace NodeJS {
    interface Global {
      UtilService: typeof UtilService
    }
  }
}

global.UtilService = UtilService;

a.ts

export const run = () => {
  console.log('a: ', global.UtilService.doSomething())
}

b.ts

export const run = () => {
  console.log('b: ', global.UtilService.doSomething())
}

main.ts

import './setup';
import * as a from './a';
import * as b from './b';

a.run();
b.run();

运行和输出:

⚡  npx ts-node ./main.ts                                                                                     
a:  do something
b:  do something

软件包版本:

"typescript": "^5.0.4",
"ts-node": "^10.9.1",

相关问题