У меня странная проблема с TypeScript, которую я не понимаю. Это может быть связано с моим отсутствием знаний, так как я никогда не сталкивался с такой проблемой в Java, и это мои первые (исправление ошибок) шаги в TypeScript / Nest JS.
Кажется, безопасность типов не гарантируется в TypeScript, и я хотел бы знать, работает ли он как «разработанный» или есть причина для этого. Вот минимальный пример для воспроизведения проблемы:
async findAll(@Query() query, @Res() res: Response) {
... lines omitted ...
this.cache.getProxyCache(query.page, query.page_size);
... lines omitted ...
}
query
- это объект, который я получил от декоратора @Query
в контроллере Nest JS.
async getProxyCache(page: number = 0, pageSize: number): Promise<AxwayProxy[]> {
console.log(`page: ${page} typeof: ${typeof page}`);
console.log(`pageSize: ${pageSize} typeof: ${typeof pageSize}`);
let pageSizeAdded = pageSize + 3;
console.log(`pageSizeAdded: ${pageSizeAdded} typeof: ${typeof pageSizeAdded}`);
let pageSizeAdded2 = Number(pageSize) + 3;
console.log(`pageSizeAdded2: ${pageSizeAdded2} typeof: ${typeof pageSizeAdded2}`);
... lines omitted ...
вывод (обратите внимание на pageSizeAdded
, который является ошибкой, pageSizeAdded2
рассчитан правильно, потому что я преобразовал из string
в number
):
page: 1 typeof: string
pageSize: 4 typeof: string
pageSizeAdded: 43 typeof: string
pageSizeAdded2: 7 typeof: number
Мне интересно, что page
и pageSize
- тип string
, хотя параметр функции объявлен с типом number
.
Кажется, что TypeScript показывает сообщение об ошибке, когда я пытаюсь вызвать функцию напрямую со строковыми значениями (например, this.cache.getProxyCache('1', '2');
), но принимаю не числовое значение, когда оно передается из другого объекта.
Кто-нибудь сталкивался с такой же проблемой? Это баг, известное ограничение? Почему это разрешено?
Спасибо, Кристоф