javascript - NestJS 和 typescript 配置强类型?
问题描述
我的应用程序中有一个主要配置,它通过环境变量(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
}
}
解决方案
见https://docs.nestjs.com/techniques/configuration#configuration-namespaces
例如
配置/database.config.ts JS
export default registerAs('database', () => ({
host: process.env.DATABASE_HOST,
port: process.env.DATABASE_PORT || 5432
}));
并注入类型化对象
constructor(
@Inject(databaseConfig.KEY)
private dbConfig: ConfigType<typeof databaseConfig>,
) {}
推荐阅读
- php - 使用 cURL 和 PHP 的 Stripe API - 无法按创建日期获取订阅或付款
- sql - 将访问语法转换为 SQL 语法
- image-processing - rawpy.imread 中的奇怪损坏
- uber-api - 我可以在不重定向登录的情况下使用 Uber API 吗?
- asp.net - 检查 API 是否正在运行
- python - (Pyinstaller) 'tclError: can't find package tkdnd' 我该如何解决这个错误?
- bash - 检查 bash 中的字符串以查看其是否为域
- amazon-web-services - Amazon S3 存储桶策略拒绝 iam 用户
- c++ - C ++类成员递归指针?我猜
- ringcentral - BOT 代币是否可用于 RingCentral BOT 应用程序