TS выберет ПЕРВУЮ подходящую функцию которая может выполнить задание а не самую лучшую. Проблема в перегрузке (ее же нет в JS поэтому все через жо-у). С одной стороны ты говоришь у меня есть 2 функции которые различны количеством аргументов , а с другой стороны они обе могут быть функциями одного аргумента поэтому перегруз тупо взял первый символ. Короче надо забыть о перегрузе type Config = { returnArray:boolean } function foo<T>(a:T[],config?:Config):T[]{ if(config?.returnArray){ // ... console.log(a.length) // modify the array } return a } foo([1,2,3,4]) // ты же игнорировал результат const y = foo([1,2,3,4],{returnArray: true});
При перегрузке тип реализации функции должен включать в себя типы всех перегрузок, поэтому сам тип реализации не входит в число перегрузок (иначе функция допускала бы лишние сигнатуры — например, аргумент от первой перегрузки, и возвращаемое значение от второй). В частности, в этом примере нужно сперва указать две перегрузки (только они будут включены компилятором в тип функции), а затем уже реализацию: play.
Обсуждают сегодня