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

时间:2017-12-28 12:12:37

标签: flowtype relayjs

我正在努力将一个库(Relay)附带的Flow类型生成器移植到一个发出TypeScript类型的生成器,但是对于{{3}中对我来说不明显的一些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,
|});

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

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

1 个答案:

答案 0 :(得分:5)

$ref$refType等是正常的类型名称。

类型的$前缀是一种表示$Keys等实用程序类型的约定,尽管此处不遵循约定。

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