Преобразование типов значений объекта Flow / TypeScript JavaScript в значения, не допускающие значения NULL - PullRequest
0 голосов
/ 17 июня 2020

У меня есть следующий тип

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

, и я хочу преобразовать все значения в значения, не допускающие значения NULL, например:

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

Какой хороший способ сделать это в Flow без повторения всех ключей? Я хочу использовать утилиту $NonMaybeType<T>, чтобы помочь мне здесь.

Ответы [ 2 ]

0 голосов
/ 05 июля 2020

В машинописном тексте это будет:

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>;

Отображаемый тип с использованием NonNullable утилит.

Playground

0 голосов
/ 17 июня 2020

Flow предоставляет служебный тип $ObjMap, который можно использовать для сопоставления значений и преобразования их в значения, не допускающие значения NULL, с помощью $NonMaybeType.

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

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