2016-12-20 10 views
0

私はFacebookのフロータイプチェッカーを使って何かを見つけようとしています。カスタムダイナミックタイプテストを作成できますか?

function isGreaterThan5(x : string | number) { 

    if (typeof x === 'string') { 
     return parseInt(x) > 5; 
    } 

    return x > 5; 
} 

流れのdynamic type teststypeofチェックを認識しているので:

は、すべての作品、私は次のコードを持っていると言います。

は、しかし - 私は少し、このコードをリファクタリングしてtypeofチェックを抜け出す場合、それは失敗します。

function isString(y) { 
    return typeof y === 'string'; 
} 

function isGreaterThan5(x : string | number) { 

    if (isString(x)) { 
     return parseInt(x) > 5; 
    } 

    return x > 5; 
} 

は、それが何らかの形で特定のタイプのために検証し、純粋な機能として私isString機能をマークすることは可能です? Like

function isString(y) { /* typecheck string */ 
    return typeof y === 'string'; 
} 

または何か?これが必要なようだ

もう一つの理由は、タイプが異なるフレームからオブジェクトをチェックする際に予期しない結果を与えることができinstanceofのチェックのためにある:それは与えられたヘルパー関数、に出てこれらのチェックを抽象化することが必要な場合があります。このようhttps://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof#instanceof_and_multiple_context_(e.g._frames_or_windows)

上記のフローは尊敬していないようです...

ありがとうございました!

答えて

0

公式フローは、カスタム述語をサポートしていません、しかし、カスタム述語(実験および文書化されていない)の構文は次のとおりです。

// I'm using a comment containing the type here because otherwise babel throws 
function isString(y)/*: boolean %checks */ { 
    return typeof y === 'string' 
} 

function isGreaterThan5(x: string | number) { 
    if (isString(x)) { 
    return parseInt(x) > 5 
    } 
    return x > 5 
} 
関連する問題