2016-09-19 33 views
3

我有各種反應過來的時候不同的道具在傳遞,可以有不同的功能組件。我經常碰到一些分支邏輯,其中如果prop1存在,做一兩件事,但如果prop2存在做別的事情。如何指定Flowjs中所需的兩個道具之一?

一個示例可以是用於與採取不同的參數的輸入的元件兩個更改處理程序。

是否有Flowjs來指定需要兩個處理程序的一個辦法?

+0

我覺得你的問題應該是適用於您的流碼的目標,包括任何環境,包括但不限於,反應,和一切。排除*反應?問題標題和問題的正文沒有更多意義嗎?我只是在暗示,就是這樣。 –

回答

3

幸運的是,你想要的流量類型的註釋,可以在環境中超過反作用施加。一般來說,如果你想要一個異或鍵入檢查你可以這樣做:

type Something = { 
    prop1: number, 
    prop2?: null 
} 

type Another = { 
    prop1?: null, 
    prop2: number 
} 

function foo(parameter: Something | Another) { 

} 

foo({ prop1: 10 }); // Good 
foo({ prop2: 10 }); // Good 
foo({ prop1: 10, prop2: 10 }); // Bad 

如果你想要一個包容性的,或者類型檢查,你可以這樣做:

type Something = { 
    prop1: number, 
    prop2?: null 
} 

type Another = { 
    prop1?: null, 
    prop2: number 
} 

type SomethingAndAnother = { 
    prop1: number, 
    prop2: number 
} 

function foo(parameter: Something | Another | SomethingAndAnother) { 

} 

foo({ something: 10, prop1: 10 }); // Good 
foo({ something: 10 }); // Bad 
foo({ prop1: 10 }); // Good 
foo({ prop2: 10 }); // Good 
foo({ prop1: 10, prop2: 10 }); // Good 

在反應,可以定義在props屬性的類型,就像這樣:

class TodoList extends React.Component { 
    props: Something | Another; 

    render(): React.Element { 
    return (
     // .... 
    ) 
    } 
} 
相關問題