如何在NodeJS Express的global. d.s文件中声明一个服务



我有一个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"]
}

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

UtilService.doSomeThing();

我在运行时得到一个错误,UtilService没有定义,虽然没有构建错误。

我想知道我的代码中是否有任何错误或任何遗漏的代码或配置。

您可以在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",