TYpescript : Function as class 上的静态方法

TYpescript : Static methods on Function as class

我有一个 fn 继承了现有的 fn(以 Angular1 $q 为例)

//$q original behavior
var defer = $q.defer();
defer.promise.then(function(result){})
//or
$q( (resolve, reject) => {
   //promise execution here
}).then(function(result){});

如果我想装饰它,我会这样做:

var Qdecorator = function($delegate) {

     var Q = function(resolver:any): any {
       //do some extra stuff here
       return $delegate.apply($delegate, arguments);
     }

     //Assign the static methods here: 

     Q.defer = function() {
        //do some stuff 
        return $delegate.defer.apply($delegate, []);
     }
     //same goes for race, when, resole reject and so on
     return Q;
}

问题是打字稿抱怨 属性 defer, race, when, resolve, etc... does not exist on type '(resolver: any) => any'

我尝试使用 IQServiceIPromise 但没有成功,但是我想提出一个更全局的问题:

如何在不使用 new

的 return 对象的 function() 上定义后期静态方法

我正在从这个 link 复制粘贴我的问题的答案: https://www.typescriptlang.org/docs/handbook/interfaces.html

interface Counter {
  (start: number): string;
  interval: number;
  reset(): void;
}

function getCounter(): Counter {
  let counter = <Counter>function (start: number) { };
  counter.interval = 123;
  counter.reset = function () { };
  return counter;
}

let c = getCounter();
c(10);
c.reset();
c.interval = 5.0;