gpt4 book ai didi

node.js - Typescript - 静态变量的未定义错误

转载 作者:行者123 更新时间:2023-12-05 04:57:16 25 4
gpt4 key购买 nike

我有这个使用 express 和 typescript 构建的 Node api 应用程序。在启动服务器之前,我使用所需的配置初始化配置类的静态变量。但是当我跨应用程序在单独的 Typescript 类中使用这个静态变量时,我不断收到这个未定义的错误。

我在这里遗漏了什么吗?

server.ts

// Initialize Config
Configuration.initAppConfig();

server.start()

app.config.ts

import config from 'config';
const packageInfo = require('../../package.json');

// other imports

export class Configuration {

static appConfig: IAppConfig;

static initAppConfig() {

Configuration.appConfig = <IAppConfig>{
appName: packageInfo.name,
db: <IDbConfig>config.get("db"),
server: <IServerConfig>config.get("server")
}
//prevent it from getting reassigned
Object.freeze(this.appConfig);
}
}

db.config.ts

import { Configuration } from './app.config';
export class DBConfig{

private static logger = LoggerFactory.getLogger(Configuration.appConfig.appName);

// other stuffs
}

错误

    private static logger = LoggerFactory.getLogger(Configuration.appConfig.appName);
^
TypeError: Cannot read property 'appName' of undefined

附言:如果我从记录器中删除静态,它就会工作。发生这种情况的任何原因?我真的在敲我的头。 :|

//works    
private logger: Logger = LoggerFactory.getLogger(Configuration.appConfig.appName);

//Not working - appName of undefined error
private static logger: Logger = LoggerFactory.getLogger(Configuration.appConfig.appName);

最佳答案

有效版本(没有静态)和无效版本(有静态)之间的主要区别在于初始化成员的时间。

当成员不是静态成员时,它仅在某些代码(此处未显示)创建包含类 (DBConfig) 的实例时才被初始化。此时,Configuration.appConfig 已经完成初始化。

当成员是静态时,它会更早地初始化,在 Configuration.appConfig 尚未初始化的阶段。

克服此问题的一种方法是确保首先初始化 Configuration.appConfig,例如通过使用同步调用(或其他一些解决方案,具体取决于此处未显示的代码段的结构)。

关于node.js - Typescript - 静态变量的未定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64510794/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com