2017-03-11 5 views
0

私は、以下に定義されるツリー構造を持っています。 optionsプロパティは、ParentActionの配列またはOptionsの配列のいずれかです。しかし、私はどのようにこれを正しくチェックするためにフロー型チェッカーを取得するか分からない。フローのjavascriptの型チェックは、単一要素型の配列の和集合を持つ再帰的定義をチェックします。

// @flow 
type Option = { 
    label: string, 
    action: string, 
    type: 'leaf' 
} 

type ParentActions = { 
    prompt: string, 
    depth: number, 
    label: string, 
    options: Array<ParentActions> | Array<Option>, 
    type: 'parent' 
} 

type RootActions = { 
    prompt: string, 
    options: Array<ParentActions> | Array<Option>, 
    type: 'root' 
} 

const thisDoesNotTypeCheckCorrectly : RootActions = { 
    options: [ 
    { 
     label: 'string', 
     action: 'string', 
     type: 'leaf' 
    }, 
    { 
     label: 'string', 
     action: 'string', 
     type: 'leaf' 
    } 
    ], 
    type: 'root' 
}; 
/* Could not decide which case to select 
union type: test.js: 15 
Case 1 may work: 
array type: test.js: 15 
But if it doesn't, case 2 looks promising too: 
array type: test.js: 15 
Please provide additional annotation(s) to determine whether case 1 works (or consider merging it with case 2): 
inferred union of array element types (alternatively, provide an annotation to summarize the array element type) */ 

答えて

0

これを試してみてください:

type RootActions = { 
    prompt: string, 
    type: 'root', 
} & ({ options: Array<ParentAction> } | { options: Array<Option> }) 
関連する問題