小编use*_*804的帖子

Flow 如何解释泛型类型?

我想了解 Flow 如何决定泛型类型使用什么类型,以及是否有办法控制推断泛型类型的级别(我的意思是进一步解释)。

这个问题的灵感来自How to type a generic function that returns subtypes。我认为这两个问题是有区别的,因为这个问题侧重于理解如何T选择,而链接则侧重于键入函数的返回类型。

身份函数是一个很好的剖析示例。它的类型相当简单

function identity<T>(value: T): T;
Run Code Online (Sandbox Code Playgroud)

这似乎足以了解实现应该是什么。但是,我觉得这种类型不足以知道身份函数实际上是做什么的。例如,我们可以(正如链接的问题试图做的那样),

function identity<T>(value: T): T {
  if (typeof value === 'string') {
    return '';
  }

  return value;
}
Run Code Online (Sandbox Code Playgroud)

尝试流程

这不会进行类型检查,Flow 会抱怨返回空字符串。然而,我想在许多语言中这会很好——我们在输入astring时返回 a string,否则我们将返回value类型的原始值——T但出于某种原因 Flow 不喜欢这样。

这个答案让我的困惑更加复杂,我们可以返回value.substr(0, 0)而不是空字符串并且 Flow 将不再抱怨,并且无法返回严格相等的值,

function identity<T>(value: T): T {
  if (value === '') {
    return '';
  }

  return value;
}
Run Code Online (Sandbox Code Playgroud)

尝试流程

我认为造成这种差异的一个主要原因是,除了“JavaScript 类型”之外,文字还可以像 Flow …

flowtype

3
推荐指数
1
解决办法
189
查看次数

标签 统计

flowtype ×1