Ввод функции mapShape в Flow - PullRequest
       2

Ввод функции mapShape в Flow

0 голосов
/ 18 февраля 2020

Попытка сделать то же самое, что и Ввод функции mapShape в TypeScript , но для Flow.

Я хочу использовать служебную функцию, подобную этой:

const out = mapShape(
  { foo: 1, bar: '2', baz: 'hello' },
  { foo: x => String(x), bar: x => parseInt(x) }
)
// outputs { foo: '1', bar: 2 }

Есть ли способ параметризовать его в Flow, чтобы он проверял типы аргументов функции преобразования, и тип выходных данных был бы таким?

{ foo: string, bar: number }

Я пытался сделать это:

export default function mapShape<I: Object, T: $ObjMapi<I, <K, V>(K, V) => (V, K, I) => any>>(
  obj: I,
  mapper: T
): $ObjMap<T, <V>(() => V) => V> {
  const result: any = {}
  for (const key in mapper) {
    if (Object.hasOwnProperty.call(mapper, key)) {
      result[key] = (mapper[key] as any)(obj[key], key, obj)
    }
  }
  return result
}

Flow выводит правильный тип вывода, но не вызывает желаемых ошибок в функциях отображения, например:

mapShape(
  {
    foo: 1,
    bar: '2',
    baz: 'hello',
  },
  {
    foo: x => String(x),
    bar: (x: number) => parseInt(x),
    //       ^^^^^^
    // Flow doesn't error that this is the wrong argument type
  }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...