2016-07-12 8 views
0

での方法を作るためにどのように次のメソッドを持っている:私は何を達成したいことは、このメソッドの型チェックを取得するためにQ.Promiseとキャッチ節の型チェック

class A { 

    m(): Q.Promise<MyObject> { 
    return someAsyncOp() 
     .then(x => transformX(x)) 
     .catch(err => { 
      log.error(err); 
      throw err; // <-- doesn't type check 
     }) 
    } 
} 

ました。これまでのところ、catchブロックがPromiseでパラメータ化された型の何かを返すと予想されるため、現れます。

メソッドが戻るかスローすることができるので、これは奇妙です。私の考えでは、これは型チェックを行うべきです。

catch句がないと、チェックが入力されます。 catch節では、コンパイルはエラーType Q.Promise<void> is not assignable to Q.Promise<MyObject>で失敗します。このエラーは、コンパイラが私がcatch節で値を返すことを期待していると信じています。私が知っている限り、私は実行する必要はありません。

このタイプのチェックを行う方法はありますか?私は何か間違っているのですか、Typescriptは私がやろうとしていることをサポートしていませんか?

活字体のコンパイラのバージョン1.8.10

答えて

0

は私が何か間違ったことをやっているか、活字体は、私はあなたが間違って何もしないされている

行うにしようとしています何をサポートしていません。 catchシナリオは完全に型チェックされていません。

理由catchへの道になるだろう、エラーが発生する可能性があります

文字通りもの。本質的には、TypeScriptは、各点であなたのthrowsを宣言することを余儀なくされるJavaパスを下りません。

+0

エラーを投げずにコードをコンパイルする方法はありません。 – pedromss

+0

いいえ、私が言っていることは、 'throw'は型チェックされていないということです。それはうまくコンパイルされます。 – basarat

+0

私が言っていることは、.jsファイルが生成されているが、コンパイルエラーがあるということです。私はそれを「コンパイル」と呼んでいません。私は 'Q.Promise 'を使用しなければなりません。ありがとうございました – pedromss

0

私の先生が私に説明しました。明らかにラムダ式をパラメータ化するのと同じくらい単純です:

class A { 

    m(): Q.Promise<MyObject> { 
    return someAsyncOp() 
     .then(x => transformX(x)) 
     .catch((err): MyObject => { // <-- Now everything compiles fine. 
      log.error(err); 
      throw err; 
     }) 
    } 
} 
関連する問題