【问题标题】:Non-null and non-undefined type in FlowFlow 中的非 null 和非未定义类型
【发布时间】:2018-10-23 00:15:10
【问题描述】:

Flow 定义了所谓的"Maybe types"。 IE。 ?stringstring | null | void 类似(void 是值类型 undefined)。

除了nullundefined 之外,是否有类似于通用类型的东西? 基本上类似于$Diff<$Diff<any, null>, void> 如果$Diff 运算符能够对非对象进行操作类型。

【问题讨论】:

    标签: flowtype non-nullable


    【解决方案1】:

    这没有什么“魔法”类型,但这样的东西应该可以工作:string | number | boolean | {} | []

    【讨论】:

      【解决方案2】:

      可以使用NonMaybeType Flow 实用程序类型:请参阅$NonMaybeType

      $NonMaybeType<T> 将类型 T 转换为非可能类型。也就是说$NonMaybeType<T>的值就是T的值,除了null和undefined。

      // @flow
      type MaybeName = ?string;
      type Name = $NonMaybeType<MaybeName>;
      
      ('Gabriel': MaybeName); // Ok
      (null: MaybeName); // Ok
      ('Gabriel': Name); // Ok
      (null: Name); // Error! null can't be annotated as Name because Name is not a maybe type
      

      【讨论】:

      • 那么any 的类型定义除了undefinednull 使用$NonMaybeType&lt;T&gt; 表示之外会是什么样子?我有 tried $NonMaybeType&lt;any&gt; 它似乎没有按预期工作 - 它允许 nullundefined
      • 正确,它不适用于any。我没有找到解决方法。如果您的函数将任何类型作为参数,但是可以表示它将返回一个非可能类型的事实:function test&lt;A&gt;(a: A): $NonMaybeType&lt;A&gt; { /*... */ }(这是我的用例)
      • “那么除了 undefined 和 null 之外的任何类型定义如何使用 $NonMaybeType 表示” - 答案是:$NonMaybeType&lt;mixed&gt;
      猜你喜欢
      • 2020-12-11
      • 2012-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-06
      • 1970-01-01
      • 2013-08-01
      • 1970-01-01
      相关资源
      最近更新 更多