2017-05-05 6 views
0

あなたは、このような判別式として列挙型で判別共用体を使用することができますtypescriptです2.0のとおり:慣用的な活字体のEnum識別型連合

  • 活字体2.3のよう

    export function getInstance(code: Enum.Type1, someParam: OtherType1): MyReturnType1; 
    export function getInstance(code: Enum.Type2, someParam: OtherType2): MyReturnType2; 
    export function getInstance(code: Enum, someParam: UnionOfOtherTypes): UnionOfReturnTypes { 
        switch (code) { 
        case Enum.Type1: 
         return new ReturnType1(someParam as OtherType1); 
        case Enum.Type2: 
         return new ReturnType2(someParam as OtherType2); 
        } 
    } 
    

    これは慣用的な方法です。これをする?

  • キャストせずにsomeParamのタイプを推論できますか?
  • タイプ定義を簡略化できますか?おそらくジェネリックを使用したり、関数のパラメータを変更したりできますか?最終関数を定義するだけです。 const getInstance =() => {};

答えて

0

あなたは、例えば型アサーションを使用する必要がある場合は、この

号を行うには、この慣用的な方法です:

  • は、それが可能のようなconstsなどの機能を宣言ですsomeParam as OtherType1安全ではありません。型アサーションの
  • +0

    いつもあなたの本を読んだ:)ありがとう!差別化された組合の戻り値の型をパラメータに基づいて推論することは可能ですか?つまり、コードがタイプAの場合、返されるタイプはタイプBになります。 – chris

    +0

    はい。戻り値の型に対する共用体のすべての文を戻します。例えばあなたのコードの異なるセクションで 'string'と' number'を返すと、戻り値の型は 'string |数字 – basarat