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