タイプガードに基づいて関数の戻り値の型を推測する

ファジーマ

私は次の定義を持っています:

function foo(arg: number[] | number) {
    if (Array.isArray(arg)) {
        return [1]
    }

    return 0
}

typescriptが戻り値の型が何であるかを自動的に理解することを期待します。型ガードがあるため、isArray()argが配列であるかどうかがわかり、戻り値の型をとして表示できnumber[]ます。ただし、を使用すると、配列を渡す場合でもfoo(...)戻り値が表示されnumber[] | 0ます。

  foo([]).push() // error because push doesnt exist on type 0

これは設計上の制限、バグ、まだ実装されていない問題、またはその他の問題ですか?

TJクラウダー

設計上の制限だと断定的に言うことはできませんが、jcalzTitian Cernicova-Dragomirのような専門家が、型推論が制限されているさまざまな場所を、私たちが望むことを実行できなかったためではなく、それを行うにはコストがかかりすぎます(ランタイムコストまたはコンパイラのコードの複雑さの観点から)。これはそのカテゴリーに当てはまると思います。

あなたはおそらくこれを知っていますが、あなたの特定の例では、オーバーロードを使用してあなたが望む結果を得ることができます:

function foo(arg: number[]): number[];
function foo(arg: number): number;
function foo(arg: number[] | number) {
    if (Array.isArray(arg)) {
        return arg.map(v => v * 2);
    }
    
    return arg * 2;
}
foo([]).push(10);

遊び場リンク

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

可変引数の型に基づいて戻り値の型を推測する

分類Dev

演算子に基づいてテンプレートの戻り値の型を推測しますか?:結果

分類Dev

関数の引数に基づいて約束の戻り値の型を推論する方法?

分類Dev

「関数のような」パラメータに基づいて関数テンプレートの戻り型を推測するにはどうすればよいですか?

分類Dev

関数の戻り値の型を動的に推測する

分類Dev

パラメータの戻り値の型から関数の戻り値の型を推測する

分類Dev

C ++ 17関数の戻り値を保持する型に関するクラステンプレート引数推論ガイドの使用

分類Dev

関数のパラメーター値に基づいて、C ++で関数の戻り値の型を動的に変更する方法はありますか?

分類Dev

TypeScript:関数の引数の型に基づいて関数の戻り値の型を設定する方法

分類Dev

テンプレート関数の戻り値の型のイテレータから値の型を推測する

分類Dev

プロパティ関数の戻り値の型をプロパティの型として推測するにはどうすればよいですか?

分類Dev

関数の戻り値の型からテンプレートの引数の型を推測する

分類Dev

引数の関数の戻り値の型に基づいてtypescript条件型を指定する方法

分類Dev

引数の型に基づいて関数の戻り値の型をキャストする方法は?

分類Dev

関数の戻り値の型を推測する方法は?

分類Dev

typescriptは、パラメーター値に基づいて関数の応答タイプを推測できますか?

分類Dev

パラメータ化された型に基づいて、関数に引数と戻り値の型の制限を強制する

分類Dev

ジェネリックを含む引数に基づいて関数の戻り値の型を推測するにはどうすればよいですか?

分類Dev

列挙型パラメーターからTypescript関数の戻り値の型を推測する

分類Dev

オプションのパラメーターに基づいて戻り値の型を指定する

分類Dev

フロータイプで、別の関数を引数として取る関数の戻り値を自動推測することは可能ですか?

分類Dev

メンバー関数の戻り値の型を推測する

分類Dev

引数に基づいてRust関数またはトレイトメソッドの戻り値の型を計算することは可能ですか?

分類Dev

TypeScriptで識別された共用体の引数に基づいて戻り値の型を自動的に推測します

分類Dev

パラメータのプロパティに基づいて関数の戻り値の型を適用します

分類Dev

オプションのコンストラクター関数パラメーターの戻り値の型から型を推測する

分類Dev

非型パラメータ値に基づいて型のリストを推測します

分類Dev

テンプレート関数にイテレータの基になるデータ型を自動的に推測させる方法はありますか?

分類Dev

関数の戻り値でタイプを推測します。ここで、関数パラメーターは関数のレコードです。

Related 関連記事

  1. 1

    可変引数の型に基づいて戻り値の型を推測する

  2. 2

    演算子に基づいてテンプレートの戻り値の型を推測しますか?:結果

  3. 3

    関数の引数に基づいて約束の戻り値の型を推論する方法?

  4. 4

    「関数のような」パラメータに基づいて関数テンプレートの戻り型を推測するにはどうすればよいですか?

  5. 5

    関数の戻り値の型を動的に推測する

  6. 6

    パラメータの戻り値の型から関数の戻り値の型を推測する

  7. 7

    C ++ 17関数の戻り値を保持する型に関するクラステンプレート引数推論ガイドの使用

  8. 8

    関数のパラメーター値に基づいて、C ++で関数の戻り値の型を動的に変更する方法はありますか?

  9. 9

    TypeScript:関数の引数の型に基づいて関数の戻り値の型を設定する方法

  10. 10

    テンプレート関数の戻り値の型のイテレータから値の型を推測する

  11. 11

    プロパティ関数の戻り値の型をプロパティの型として推測するにはどうすればよいですか?

  12. 12

    関数の戻り値の型からテンプレートの引数の型を推測する

  13. 13

    引数の関数の戻り値の型に基づいてtypescript条件型を指定する方法

  14. 14

    引数の型に基づいて関数の戻り値の型をキャストする方法は?

  15. 15

    関数の戻り値の型を推測する方法は?

  16. 16

    typescriptは、パラメーター値に基づいて関数の応答タイプを推測できますか?

  17. 17

    パラメータ化された型に基づいて、関数に引数と戻り値の型の制限を強制する

  18. 18

    ジェネリックを含む引数に基づいて関数の戻り値の型を推測するにはどうすればよいですか?

  19. 19

    列挙型パラメーターからTypescript関数の戻り値の型を推測する

  20. 20

    オプションのパラメーターに基づいて戻り値の型を指定する

  21. 21

    フロータイプで、別の関数を引数として取る関数の戻り値を自動推測することは可能ですか?

  22. 22

    メンバー関数の戻り値の型を推測する

  23. 23

    引数に基づいてRust関数またはトレイトメソッドの戻り値の型を計算することは可能ですか?

  24. 24

    TypeScriptで識別された共用体の引数に基づいて戻り値の型を自動的に推測します

  25. 25

    パラメータのプロパティに基づいて関数の戻り値の型を適用します

  26. 26

    オプションのコンストラクター関数パラメーターの戻り値の型から型を推測する

  27. 27

    非型パラメータ値に基づいて型のリストを推測します

  28. 28

    テンプレート関数にイテレータの基になるデータ型を自動的に推測させる方法はありますか?

  29. 29

    関数の戻り値でタイプを推測します。ここで、関数パラメーターは関数のレコードです。

ホットタグ

アーカイブ