首页 > 解决方案 > 如何选择流中函数返回的 sum 类型的非 null 版本?

问题描述

我有一个具有以下签名的函数:


() =>
        | {|
            something: {
              isConnected: boolean,
            },
            isLoading: boolean
          |}
        | {|
            something: null,
            isLoading: boolean
          |}
    >

如您所见,它可以返回两个可能的对象,一个具有一个something具有内容的属性,另一个具有该属性的 null 对象。我想使用一些实用程序类型来选择something属性的非空版本。我尝试了以下方法:

type Something = $NonMaybeType<
  $PropertyType<
    $Call<
      () =>
        | {|
            something: {
              connectionError: string,
            },
            isLoading: boolean
          |}
        | {|
            something: null,
            isLoading: boolean
          |}
    >,
    "something"
  >
>

但是,当我使用生成的类型传递任何对象类型时,我仍然会收到错误消息,告诉我空(null 版本)与对象(函数所期望的东西)不兼容。

如何选择 sum 类型右侧的正确属性?

标签: flowtype

解决方案


推荐阅读