需要帮助理解一些Flow类型语法

all*_*loy 5 flowtype relayjs

我正在努力将带有库(Relay)的Flow类型生成器移植到一个发出TypeScript类型的生成器,但是对于一些在我的代码片段中并不明显的Flow语法有一些疑问:

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,
|});
Run Code Online (Sandbox Code Playgroud)

也就是说,什么是$ref,$refType%other?或者它们不是Flow特定的,而是Relay特定的?

我尝试搜索flowtype docs和repo,但很难找到答案.还将非常感谢与实施文档和/或相关部分的链接.

sat*_*164 5

$ref,$refType等等都是正常的类型名称.

$类型的前缀是表示实用程序类型的约定,例如$Keys,虽然看起来不像这里遵循约定.

%other只是一个普通的字符串.Relay可能会在内部将字符串用于某些特殊用途.