还有其他方法可以编写以下功能吗?
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>
但这并不是那样的。
(这完全取决于好奇心......我将使用&#34;否则&#34;到我的代码中)
答案 0 :(得分:1)
不确定是否一定更好,但你可以使用装饰器:
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时返回默认值。
答案 1 :(得分:0)
请参阅https://blog.mariusschulz.com/2016/11/18/typescript-2-0-the-never-type,了解“永远不会”。运营商。
不是返回一个空的observable,而是告诉typescript该函数可能永远不会返回任何内容。
getStation(id) : Observable<any> | never {
if (id) {
return this.httpClient.get('/api/stations/edit/' + id, {})
}
}
您的用例是什么?而不是传递未定义的&#39;作为该方法的参数,您是否只能检查代码中其他地方的ID,并且只有在id存在时才调用该方法?