2016-12-23 4 views
0

моделью данных JSON Я работаю с вложенной структурой, состоящими из узлов ветвления и специальных узлов, которые многозначные основаны на существовании $type ключа, например:Несовместные союзы с неопределенным тегом

{ "a": { "b": { "$type": "special" } } } 

Я хотели смоделировать это с помощью потока, но помечено союзы, кажется, требуют, чтобы отдельные метки одного и того же типа, например:

// @flow 
type Special = { $type: 'special'}; 
type Branch = { $type: ?null, [key:string]: any }; 

function isSpecial(param: Special | Branch): ?Special { 
    if (param.$type === 'special') { 
     return param; 
    } 
} 

дает следующее сообщение об ошибке:

$ node_modules/.bin/flow check-contents < example.js 
-:2 
2: type Special = { $type: 'special'}; 
          ^^^^^^^^^ string literal `special`. This type is incompatible with 
3: type NotSpecial = { $type: ?null, [key:string]: any }; 
           ^^^^ null 

-:3 
3: type NotSpecial = { $type: ?null, [key:string]: any }; 
           ^^^^ null. This type is incompatible with 
2: type Special = { $type: 'special'}; 
          ^^^^^^^^^ string literal `special` 

-:3 
3: type NotSpecial = { $type: ?null, [key:string]: any }; 
           ^^^^ undefined. This type is incompatible with 
2: type Special = { $type: 'special'}; 
          ^^^^^^^^^ string literal `special` 


Found 3 errors 

Есть ли способ справиться с таким случаем?

ответ

0

Хотя теоретически это должно работать, это не поддерживается Flow. Для потока требуется, чтобы теги имели одинаковый тип.