[英]configService.get<T>('key') fails on type cast and joi on validation
我為 NestJs 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')
如圖這里用一個通用的類型。 為什么它仍然返回一個字符串? 我希望類型轉換。端口變量可能是一個不好的例子,因為 Nest 能夠處理字符串類型的端口。 但是,如果配置變量應該是數字但類型是字符串,則其他部分需要數字並拋出錯誤。
我錯過了什么?
如上所述,這是非常具有誤導性的,應該更改。 如果泛型表示具體類型,則沒有理由顯式轉換返回值。
我不明白的是為什么沒有類型轉換異常:
const myNumber:number = this.configService.get('PROPERTY_PATH');
即使 ConfigService 有效地返回一個字符串,它如何按原樣分配給一個數字? 事實上,即使 myNumber 明確定義為數字,它也將有效地成為一個字符串。 這也是一個 Typescript 問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.