我应该如何声明返回没有数据的$ q promise的函数的返回类型?

时间:2014-11-03 11:36:27

标签: javascript angularjs typescript

我有这个功能:

getMethod = (): ng.IPromise<any> => {
    if (1 == 2) {
        return this.$q.when();
    }
    var defer = this.$q.defer();
    this.$http({
        url: '/abc',
        method: "GET"
    })
        .success((): void => {
            //
            defer.resolve();
        })
        .error((): void => {
            //
            defer.reject();
        })
    return defer.promise;
}

这没关系,返回的承诺不包含任何数据。

所以我把第一行改为:

getMethod = (): ng.IPromise<void> => {

现在我收到一个错误:

  

错误3无法转换'ng.IPromise&lt; {}&gt;' 'ng.IPromise':       类型'ng.IPromise&lt; {}&gt;'的属性类型'then'并且'ng.IPromise'不兼容:

有人可以就如何正确声明返回类型给我建议。我知道使用作品,但如果函数真的总是返回void,它似乎不是一个干净的解决方案。

1 个答案:

答案 0 :(得分:5)

我不确定我是否理解你要做的事情,但这会毫无错误地转变

   getMethod = (): ng.IPromise<void> => {
        var defer:ng.IDeferred<void> = this.$q.defer<void>();
        this.$http({ url: '/abc', method: "GET"}).then(
            payload => defer.resolve(),
            error=> defer.reject()
        );
        return defer.promise;
    }

这可能意味着您想知道已完成的操作 我选择观察者模式,消息传递,回调? 在我看来,承诺更好地封装值,maybe_value,