Функциональные типы в TS - это типы, значением которых может являться любая функция с совместимой сигнатурой. Методы классов - это те же функции. При этом надо помнить, что this в JS/TS определяется вызовом, а не объявлением функции/метода.
И это существенно отличает их от делегатов в шарпе, которые по своей сути являются умной ссылкой на метод конкретного инстанса.
Аналог делегата из шарпа на TS может выглядеть как то так:
class Delegate<Target, Args extends any[], Ret> {
constructor(
private target: Target,
private method: (this: Target, ...args: Args) => Ret,
) {}
public invoke(...args: Args): Ret {
return this.method.apply(this.target, args);
}
}
Вот только конструировать такой делегат в отличии от шарпа придется явно.
https://www.typescriptlang.org/play?#code/MYGwhgzh...