将 Flow/TypeScript JavaScript 对象值类型转换为不可空

Cast Flow/TypeScript JavaScript object value types to non-nullable

我有以下类型

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

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

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

在 Flow 中无需重复所有按键的好方法是什么?我希望使用 $NonMaybeType<T> 实用程序来帮助我。

Flow 提供了一个 $ObjMap 实用程序类型,您可以使用它来映射值并通过 $NonMaybeType.

将它们转换为不可空值
type MyObject = $ReadOnly<{
  foo: ?number,
  bar: ?number,
  baz: ?number,
}>;

type NonMaybeValueType = <V>(V) => $NonMaybeType<V>;
type MyNonNullValuesObject = $ObjMap<MyObject, NonMaybeValueType>;

在打字稿中,这将是:

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 using NonNullable 实用程序。

Playground