Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 用空可观测函数简化函数_Angular_Typescript_Observable - Fatal编程技术网

Angular 用空可观测函数简化函数

Angular 用空可观测函数简化函数,angular,typescript,observable,Angular,Typescript,Observable,是否有其他方法编写以下函数 getStation(id) { if (id) { return this.httpClient.get('/api/stations/edit/' + id, {}) }else { return Observable.empty(); } } getStation(id) { return id ? this.httpClient.get('/api/stations/edit/' + id,

是否有其他方法编写以下函数

getStation(id) {
    if (id) {
        return this.httpClient.get('/api/stations/edit/' + id, {})
    }else {
        return Observable.empty();
    }
}


getStation(id) {
    return id ? this.httpClient.get('/api/stations/edit/' + id, {}) : Observable.empty();
}
我想知道是否有办法删除
else
部分,默认情况下,如果没有返回函数,则返回一个空的Observable

getStation(id): Observable<any>
getStation(id):可观察
但这不是那样的


(这都是出于好奇……我会在我的代码中使用“else”)

不确定是否一定更好,但你可以使用装饰师:

function DefaultObservable(target,  prop) {
    let original: Function = target[prop];
    target[prop] = function() {
        return original.apply(this, arguments) || Observable.empty();
    }
}

class MyClass {
    @DefaultObservable
    getStation(id) {
        if (id) {
            return this.httpClient.get('/api/stations/edit/' + id, {});
        }
    }
}
装饰程序会扭曲原始函数,以便在从原始函数返回的值为falsy时返回默认值。

有关“从不”运算符的详细信息,请参阅

您可以告诉typescript函数可能永远不会返回任何内容,而不是返回一个空的可观察对象

getStation(id) : Observable<any> | never   { 
    if (id) {
          return this.httpClient.get('/api/stations/edit/' + id, {})
    }
}
getStation(id):可观察的|从不{
如果(id){
返回此.httpClient.get('/api/stations/edit/'+id,{})
}
}

您对此的用例是什么?您不能将“undefined”作为参数传递给该方法,而只是在代码中的其他地方检查id,并仅在id存在时调用该方法吗?

No,您不能纯粹通过定义该方法给出某种默认返回。如果你说它返回的是可观察的,你必须在某一点上明确地这样做。那么…你想要的东西与
其他
完全一样,但不是
其他
或三元?我不确定您的目标是什么。不过,您可以指定它可能返回多个类型。只需在类型之间使用管道符号。可观察的|其他类型。不过,这通常不是一个好的做法。(这完全是出于好奇……我会在代码中使用“else”)