2016-09-21 19 views
5

Aşağıdaki örnekte, anahtar deyimini kullanarak İleti türünün eşleştirme türünü kullandığım için, hatalı durumumu 'ENUM_TYPO' olarak tanımlamak için akışını isterim. Şu anda yok. oSwitch over FlowType birleştirme türleri (String Enums) güvenle kullanılabilir mi?

// @flow 
function foo() { 
    throw new Error(); 
    return 123; // This will error 
}. 

gibi bir şey Ancak sürece

type Message = 'BROADCAST_MESSAGE' | 'PRIVATE_MESSAGE'; 

const message: Message = 'BROADCAST_MESSAGE'; 

switch (message) { 
    case 'ENUM_TYPO': 
    // Do Broadcast 
    break; 
    default: 
    break; 
} 

cevap

4

v0.32.0 itibariyle Akış düşünün, ulaşılamaz kod hakkında aşağıdaki kodu şikayet etmiyor

// @flow 
function foo(x: string): Object { 
    if (x === 123) { 
    return x; 
    } 
    return {}; 
} 

Will anda olmaz hata bu kodda. Akış aslında x === 123'un asla doğru olmayacağını fark ediyor. if bloğunun içinde, Flow, x türünü boş türe göre hassaslaştıracaktır, çünkü bu kodun her zaman ulaşılacağına inanmamaktadır. Bu yüzden return x ifadesinden şikayetçi değil.

Akış ekibinin üyelerinden biri, akışa erişilebilirlik analizi eklenmesiyle neredeyse tamamlandı. Bu gelişme bir kez (tahmin ediyorum v0.34.0?), Akış her zaman başarısız olacağını düşündüğü bir koşul gördüğü zaman şikayet edecektir. Bu, size örnek olarak yardımcı olacaktır, çünkü anahtar beyanı vakaları temelde sıkı eşitlik kontrolleridir.