В TypeScript есть несколько способов вернуть тип из колбэка без явного указания.
1. Использование встроенной утилиты ReturnType. Эта утилита возвращает тип значения функции, переданной в качестве аргумента. Например:
function foo(callback: () => string): ReturnType<typeof callback> { return callback(); } const result = foo(() => "Hello");
В этом коде мы передаем функцию () => "Hello"
в качестве аргумента в функцию foo
. Функция foo
использует утилиту ReturnType для возвращения типа значения этой функции. Таким образом, переменная result
будет иметь тип string
.
2. Использование оператора typeof. Если функция-колбэк является свойством объекта или имеет имя, можно использовать оператор typeof для получения типа этой функции. Например:
const obj = { callback: () => "Hello" }; type CallbackType = typeof obj.callback; function foo(callback: CallbackType): ReturnType<CallbackType> { return callback(); } const result = foo(obj.callback);
В этом примере функция-колбэк obj.callback
имеет тип () => string
. Мы сохраняем этот тип в CallbackType
. Затем, используя CallbackType
, мы указываем тип аргумента функции foo
и возвращаемого значения.
3. Использование обобщений (generics). Обобщения позволяют параметризовать тип внутри функции, основываясь на типе аргумента. Например:
function foo<T>(callback: () => T): T { return callback(); } const result = foo(() => "Hello");
В этом примере мы используем обобщение T
для параметризации типа, возвращаемого функцией-колбэк. Тип T
будет определен типом значения, возвращаемого функцией-колбэк. В этом случае переменная result
будет иметь тип string
.
Какой из этих подходов использовать зависит от конкретного контекста и требований вашего проекта.