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

Posted

技术标签:

【中文标题】需要帮助理解一些流类型语法【英文标题】:Need help understanding some Flow type syntax 【发布时间】:2018-06-08 23:48:34 【问题描述】:

我正在努力将库 (Relay) 附带的 Flow 类型生成器移植到发出 TypeScript 类型的库中,但对 this snippet 中对我来说并不明显的一些 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是什么?或者它们不是特定于流的,而是特定于中继的?

我尝试搜索 flowtype 文档和 repo,但很难找到答案。链接到文档和/或实现的相关部分也将不胜感激。

【问题讨论】:

@halfer 完成,感谢提醒???? 【参考方案1】:

$ref$refType 等是普通类型名称。

类型的 $ 前缀是表示实用程序类型(例如 $Keys)的约定,但此处似乎没有遵循约定。

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

【讨论】:

$ref 是变量名的一部分。完整的变量名称是TypeNameInside$ref。对于 JS 解释器/流服务器,$ 没有什么特别之处——它只是另一个字符。

以上是关于需要帮助理解一些流类型语法的主要内容,如果未能解决你的问题,请参考以下文章

Haskell 需要帮助理解流

我需要帮助理解与实体框架上下文的第一种方法相关的 C# 语法 [重复]

我需要帮助重新编写一个最初用 Squeel 编写的额外数据库查询,我尝试了各种语法,但似乎无法理解

Kotlin语法基础,控制流

Kotlin语法基础,控制流

awk:第 1 行:在或附近出现语法错误,需要一些 bash 帮助 [关闭]