Я создал пользовательский файл конфигурации для моего Nest Js REST API. Это простой пример для порта, который прослушивает приложение.
У меня есть файл .env с содержанием
SERVER_PORT = 3000
Пример моего файла конфигурации
import { Injectable } from '@nestjs/common';
import { ConfigService } from '@nestjs/config';
import * as Joi from '@hapi/joi';
@Injectable()
export class ServerConfigService {
constructor(private readonly configService: ConfigService) {
const { error } = Joi.object({
port: Joi.number()
.port()
.required(),
}).validate({ port: this.port });
if (error) { // no error thrown
throw error;
}
console.log(typeof this.port); // type is string but should be number
}
public get port(): number {
return this.configService.get<number>('SERVER_PORT');
}
}
Я ожидаю, что тип порта будет number
, но он все равно будет string
. Итак, две вещи приходят мне на ум:
- Я называю
this.configService.get<T>('key')
, как показано здесь с обобщенным типом c. Почему он все еще возвращает строку? Я ожидал бы приведение типа. - Я использую joi для проверки, как описано здесь . Я ожидаю, что joi выдаст ошибку.
Переменная порта может быть плохим примером, потому что Nest может работать с портом типа string. Но другие части ожидают числа и выдают ошибки, если переменная конфигурации должна быть числом, но имеет тип string.
Я что-то пропустил?