2017-08-24 11 views
-1

次の関数を書く方法はありますか?空の観測値を持つ関数を簡略化

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一部を削除し、デフォルトでする方法があったかどうかを疑問に思いました。

​​

しかし、これはうまくいきません。

(それはすべての好奇心についてです...私は私のコードに「他」を使用します)、必ずしも優れている場合

+0

いいえ、純粋にメソッドの定義から何らかの種類のデフォルトリターンを与えることはできません。 'Observable 'を返すと言うなら、ある時点でそれを明示的に行う必要があります。 – jonrsharpe

+0

だから、あなたは、「else」とまったく同じことをしたいが、「else」や三項ではないものがほしいと思う?私は本当にあなたの目標がここにあるのか分かりません。 –

+0

しかし、潜在的に複数の型を返すように指定できます。タイプ間でパイプ記号を使用するだけです。オブザーバブル |他のタイプはこちら。しかし、それは通常、良い練習ではありません。 – diopside

答えて

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, {}); 
     } 
    } 
} 

デコレータ経糸を元の関数から返された値が偽であれば、デフォルト値を返すように元の関数を呼び出します。

0

「never」演算子については、https://blog.mariusschulz.com/2016/11/18/typescript-2-0-the-never-typeを参照してください。

空のオブザーバブルを返すのではなく、関数が何も返さない可能性があることをtypescriptに伝えることができます。

getStation(id) : Observable<any> | never { 
    if (id) { 
      return this.httpClient.get('/api/stations/edit/' + id, {}) 
    } 
} 

これはどのような用途ですか?そのメソッドにパラメータとして 'undefined'を渡すのではなく、あなたのコードのどこか別の場所でidをチェックして、idが存在すればそのメソッドだけを呼び出すことができませんでしたか?

関連する問題