В TypeScript можно задавать условные дженерики для входящих параметров функции с использованием так называемых условных типов (conditional types). Условные типы позволяют нам определить тип в зависимости от условия, которое задается условием типа.
Для создания условного дженерика необходимо использовать ключевое слово "extends".
Вот пример:
function foo<T extends string | number>(param: T): T { return param; }
В этом примере мы объявляем функцию foo
, которая принимает параметр param
с типом T
. Здесь T
обобщенный тип, который может быть либо string
, либо number
.
Функция возвращает тот же самый тип T
, который был передан параметру param
. Таким образом, если мы передаем строковый аргумент, функция вернет строковое значение, а если мы передаем числовой аргумент, функция вернет числовое значение.
Мы можем использовать такой условный дженерик для обеспечения типизации внутри функции в зависимости от типа параметра:
function bar<T extends string | number>(param: T): void { if (typeof param === 'string') { console.log(param.length); } else if (typeof param === 'number') { console.log(param.toFixed(2)); } }
В этом примере функция bar
принимает параметр param
с типом T
, который может быть string
или number
. В функции мы проверяем тип param
с помощью оператора typeof
и выполняем различные операции в зависимости от типа.
Использование условных дженериков позволяет нам более точно определять и контролировать типы входящих параметров функции, что способствует более безопасному и предсказуемому программированию.