Javascript 我应该如何声明一个函数的返回类型,该函数返回一个没有数据的$q承诺?

Javascript 我应该如何声明一个函数的返回类型,该函数返回一个没有数据的$q承诺?,javascript,angularjs,typescript,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 => {

我有这个功能:

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=>{
如果(1==2){
返回此。$q.when();
}
var defer=this.$q.defer();
这是$http({
url:“/abc”,
方法:“获取”
})
.success(():void=>{
//
defer.resolve();
})
.错误(():void=>{
//
defer.reject();
})
回报、承诺;
}
这可以正常工作,并且返回的承诺不包含任何数据

因此,我将第一行更改为:

getMethod = (): ng.IPromise<void> => {
getMethod=():ng.IPromise=>{
现在我得到一个错误:

错误3无法将“ng.IPromise”转换为“ng.IPromise”: “ng.IPromise”和“ng.IPromise”类型的属性“then”类型不兼容:


有人能告诉我如何正确声明返回类型吗?我知道使用可以工作,但如果函数真的总是返回void,这似乎不是一个干净的解决方案。

我不确定我是否理解您试图执行的操作,但这会无误地传输

   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;
    }
getMethod=():ng.IPromise=>{
变量延迟:ng.IDeferred=this.$q.defer();
这是.http({url:'/abc',方法:“GET”})(
有效负载=>defer.resolve(),
error=>defer.reject()
);
回报、承诺;
}
这可能意味着您想知道操作是否已完成 我会选择观察者模式、消息传递、回调?
在我看来,承诺最好是封装值,可能是值,

我不确定我是否理解您试图做的事情,但这是透明的,没有错误

   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;
    }
getMethod=():ng.IPromise=>{
变量延迟:ng.IDeferred=this.$q.defer();
这是.http({url:'/abc',方法:“GET”})(
有效负载=>defer.resolve(),
error=>defer.reject()
);
回报、承诺;
}
这可能意味着您想知道操作是否已完成 我会选择观察者模式、消息传递、回调?
在我看来,承诺最好是封装值,也许是值,

请为语言语法添加相关的标记。那么,为什么你的承诺不能用值来解析呢?通常应该这样。顺便说一句,这段代码有更多内容,但对于这个问题,它被简化了。承诺返回时有成功或失败,这就足够了。@Steve-这就是在ng的接口规范中,请不要将SM作为选项。IPromise@SamanthaJ将行
var defer=this.$q.defer();
更改为
var defer=this.$q.defer();
(明确指定void类型参数)请为语言语法添加相关标记。那么,为什么您的承诺不使用值进行解析呢?通常应该这样。顺便说一句,这段代码有更多内容,但对于这个问题它被简化了。承诺返回的成功或失败就够了。@Steve-这似乎不是ng接口规范中的选项。IPromise@SamanthaJ改变行
var defer=this.$q.defer();
var defer=this.$q.defer();
(明确指定void类型参数)