В TypeScript есть несколько способов типизировать возвращаемое значение функции в зависимости от переданных параметров. Рассмотрим несколько вариантов.
1. Использование условных типов:
Для типизации возвращаемого значения в зависимости от переданных параметров можно использовать условные типы в TypeScript. Например:
function getValue<T>(value: T): T extends string ? string : number { if (typeof value === 'string') { return value.toUpperCase(); } else { return value * 2; } }
В данном примере, если переданный параметр является строкой, возвращается строка (приведенная к верхнему регистру), иначе возвращается число умноженное на 2. Это означает, что возвращаемый тип функции будет зависеть от типа переданного параметра.
2. Использование перегрузок:
Другой способ типизации возвращаемого значения функции в зависимости от переданных параметров - это использование перегрузок. Например:
function getValue(value: string): string; function getValue(value: number): number; function getValue(value: string | number): string | number { if (typeof value === 'string') { return value.toUpperCase(); } else { return value * 2; } }
В данном примере мы определяем две перегрузки функции: одну для строковых параметров и другую для числовых параметров. Затем, реализуем саму функцию, которая проверяет тип переданного параметра и возвращает соответствующий тип. При вызове функции, TypeScript выберет соответствующую перегрузку в зависимости от переданного параметра.
3. Использование типовых словарей:
Также можно воспользоваться типовыми словарями для типизации возвращаемого значения функции. Например:
type ValueMapper = { string: string; number: number; }; function getValue<T extends keyof ValueMapper>(value: T): ValueMapper[T] { if (typeof value === 'string') { return value.toUpperCase() as ValueMapper[T]; } else { return value * 2 as ValueMapper[T]; } }
В данном примере мы создаем типовый словарь ValueMapper, который содержит соответствия между типами параметров и типами возвращаемого значения. Затем, в самой функции мы используем ограничение типа T, чтобы указать, что параметр должен быть ключом словаря ValueMapper. Возвращаемое значение функции типизируется в соответствии с типом значения, соответствующим ключу T.
Все эти методы позволяют типизировать возвращаемое значение функции в зависимости от переданных параметров в TypeScript. В зависимости от конкретной ситуации и предпочтений разработчика можно выбрать наиболее удобный и подходящий способ.