我正在努力将一个库(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,但很难找到答案。还将非常感谢与实施文档和/或相关部分的链接。
答案 0 :(得分:5)
$ref
,$refType
等是正常的类型名称。
类型的$
前缀是一种表示$Keys
等实用程序类型的约定,尽管此处不遵循约定。
%other
只是一个普通的字符串。 Relay可能会在内部将字符串用于某些特殊用途。