2017-05-26 3 views
2

Ich mache mein erstes Flow-Projekt und ich bin mit einem "seltsamen" Verhalten fest.Flow verlieren Literaltyp in Kreuzung Typ

Hier ist ein minimalistischer Code, mein Problem zu reproduzieren

type PropBase = { name: string } 

export type PropTyped = 
    | { type: 'string', value: string } 
    | { type: 'number', value: number } 

export type Prop = PropBase & PropTyped 

const p1: Prop = { name: 'prop1', type: 'string', value: 'coucou' }; 
// Error 
const p2: Prop = p1; 

Der Fehler ist:

10: const p2: Prop = p1; 
        ^intersection type. This type is incompatible with 
7: export type Prop = PropBase & PropTyped 
           ^union: object type(s) 

(Flow-v0.47.0, try flow)

Fluss der zu "verlieren" scheint wörtlicher Typ ... Aber warum? Mache ich etwas falsch ?

+0

Ich habe eine Bearbeitung mit einem kleineren Beispiel eingereicht. Das ist definitiv ein Fehler. Fühlen Sie sich frei, ein Problem auf https://github.com/facebook/flow zu öffnen –

+0

@NatMote Ich habe ein Problem geöffnet, aber ich habe Angst, dass es in der Vielzahl von anderen Fragen verloren gehen wird :-) –

Antwort

0

Die Antwort ist, dass dies noch nicht von Flow unterstützt wird.

Eine Lösung ist die Kreuzung in jeder Typdeklaration zu verwenden:

export type PropBase = { name: string } 

export type PropTyped = 
    | { type: 'string', value: string & PropBase } 
    | { type: 'number', value: number & PropBase} 

Here is a dedicated issue, ich weiß nicht, ob es eine kurze Zeit Plan ist es, diesen Fall zu behandeln.