Гнездо JS и машинописный конфиг сильных типов? - PullRequest
0 голосов
/ 20 апреля 2020

В моем приложении есть основной конфиг, который выражается через переменные среды (process.env). Как я могу выставить его со следующим JS как один объект? В приведенном ниже примере я могу получить значение по ключу. Но я передаю строку, здесь нет никакой машинописи.

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { ConfigModule } from '@nestjs/config';
import { envVarsValidator } from "../interfaces/Config";

@Module({
  imports: [
    ConfigModule.forRoot({
      isGlobal: true,
      validationSchema: envVarsValidator,
    })
  ],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

import { Injectable } from '@nestjs/common';
import { ConfigService } from "@nestjs/config";

@Injectable()
export class AppService {
  constructor(private configService: ConfigService) {}

  getHello(): string {
    return this.configService.get<string>('hello'); // not what i need;
  }

}

Псевдокод для того, что мне нужно:


export class SomeService {
  constructor(private configService: ConfigService) {}

  someLogic(): any {
    const port = this.configService.config.port;
// what i need is one main config object with highlighting properties avaliable on this object via typescript
  }

}

1 Ответ

0 голосов
/ 20 апреля 2020

см. https://docs.nestjs.com/techniques/configuration#configuration -именных пространств

например,

config / database.config.ts JS

export default registerAs('database', () => ({
  host: process.env.DATABASE_HOST,
  port: process.env.DATABASE_PORT || 5432
}));

и ввести введенный текст объект

constructor(
  @Inject(databaseConfig.KEY)
  private databaseConfig: ConfigType<typeof databaseConfig>,
) {}
...