TypeScript утилита, которая превращает экземпляр класса в вызываемую функцию с помощью Proxy. Позволяет вызывать экземпляр как функцию, сохраняя при этом доступ ко всем его свойствам и методам.
Применение
Идеально подходит для создания fluent API, где объект должен быть одновременно вызываемым и сохранять интерфейс класса:
classCalculator {
value:number=0
call(x:number) {
this.value += x
returnthis
}
reset() {
this.value =0
returnthis
}
}
constcalc=toCallable(newCalculator())
calc(5)(10) // Вызываем через метод call()
console.log(calc.value) // Доступ к свойствам: 15
calc.reset() // Вызов методов
Возможности
Типобезопасность: Полная поддержка TypeScript с правильным выводом типов
Двойной интерфейс: Используется как функция или доступ к членам класса
Без накладных расходов: Минимальные затраты времени выполнения через Proxy
Чистый API: Прозрачная делегация к методу call()
Как это работает
Создает Proxy вокруг привязанной функции
Trap apply делегирует вызов методу call() экземпляра
Trap get предоставляет доступ к свойствам/методам экземпляра