2017-12-28 9 views
4

Ich arbeite an der Portierung des Flow-Typ-Generator, der mit einer Bibliothek (Relay) zu einer, die TypeScript-Typen emittiert, aber einige Fragen über einige Flow-Syntax, die nicht offensichtlich ist in this snippet :Benötigen Sie Hilfe beim Verständnis einiger Flow-Typ-Syntax

import type { FragmentReference } from 'relay-runtime'; 
export opaque type TypenameInside$ref: FragmentReference = FragmentReference; 
export type TypenameInside = ({| 
    +__typename: 'User', 
    +firstName: ?string, 
    +$refType: TypenameInside$ref, 
|} | {| 
    +__typename: 'Page', 
    +username: ?string, 
    +$refType: TypenameInside$ref, 
|} | {| 
    // This will never be '%other', but we need some 
    // value in case none of the concrete values match. 
    +__typename: '%other', 
    +$refType: TypenameInside$ref, 
|}); 

nämlich was sind $ref, $refType und %other? Oder sind sie nicht Flow-spezifisch, sondern Relay-spezifisch?

Ich habe versucht, die Flow-Typ-Docs und Repo, aber hatte eine sehr harte Zeit mit Antworten. Links zu den Dokumenten und/oder relevanten Teilen der Implementierung würden ebenfalls sehr geschätzt werden.

+1

@halfer Fertig, danke für den heads-up – alloy

Antwort

4

$ref, $refType usw. sind normale Typnamen.

Das Präfix $ für Typen sind eine Konvention, um Dienstprogrammtypen wie $Keys zu bezeichnen, obwohl es nicht so aussieht, als ob die Konvention hier befolgt wird.

%other ist nur eine normale Zeichenfolge. Relay verwendet die Zeichenfolge wahrscheinlich intern zu einem bestimmten Zweck.

+0

'$ ref' ist Teil des Variablennamens. Der vollständige Variablenname ist 'TypeNameInside $ ref'. Für den JS-Interpreter/Flow-Server gibt es nichts besonderes an dem '$' - es ist nur ein anderes Zeichen. –

Verwandte Themen