【问题标题】:Cast Flow/TypeScript JavaScript object value types to non-nullable将 Flow/TypeScript JavaScript 对象值类型转换为不可为空
【发布时间】:2020-07-05 14:13:23
【问题描述】:

我有以下类型

type MyObject = $ReadOnly<{
  foo: ?number,
  bar: ?number,
  baz: ?number,
}>;

并且我想将所有值转换为不可为空的,例如;

type MyNonNullValuesObject = $ReadOnly<{
  foo: number,
  bar: number,
  baz: number,
}>;

在 Flow 中不重复所有键的好方法是什么?我希望在这里使用$NonMaybeType&lt;T&gt; 实用程序来帮助我。

【问题讨论】:

    标签: javascript typescript flowtype


    【解决方案1】:

    在打字稿中,这将是:

    type MyObject = Readonly<{
      foo: number | null,
      bar: number | null,
      baz: number | null,
    }>;
    
    type NonNullableObject<T> = { [K in keyof T]: NonNullable<T[K]> };
    
    type MyNonNullableObject = NonNullableObject<MyObject>;
    

    Mapped type 使用 NonNullable 实用程序。

    Playground

    【讨论】:

      【解决方案2】:

      Flow 提供了一个 $ObjMap 实用程序类型,您可以使用它来映射值并通过 $NonMaybeType 将它们转换为不可为空的值。

      type MyObject = $ReadOnly<{
        foo: ?number,
        bar: ?number,
        baz: ?number,
      }>;
      
      type NonMaybeValueType = <V>(V) => $NonMaybeType<V>;
      type MyNonNullValuesObject = $ObjMap<MyObject, NonMaybeValueType>;
      

      【讨论】:

        猜你喜欢
        • 2022-09-30
        • 2021-11-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-29
        • 2018-03-26
        • 1970-01-01
        • 2023-02-05
        相关资源
        最近更新 更多