2016-09-27 3 views
0

У меня есть 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'

Я пытался использовать IQService и IPromise не повезло, БТЕ я хотел бы поднять более глобальный вопрос:

Как определить поздно статические методы (функции), которые возвращают объект без использования new

+0

Где и как вы определяя '$ q'? –

+0

@JamesMonger https://github.com/a-lucas/angular.js-server-bower – Ant

ответ

0

я копирую вставив ответ на мой вопрос по этой ссылке: 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;