Поток $ ObjMap по параметру типа - PullRequest
0 голосов
/ 18 февраля 2020

Поток не вызывает ошибку, которую я ожидаю в следующем. Это ошибка в Flow (возможно) или я неправильно понимаю параметры типа?

function test<A: Object>(
  obj: A,
  mapper: $ObjMap<A, <V>(V) => V => any>
) {
}

test(
  {
    foo: 1,
    bar: '2',
  },
  {
    foo: (x: number) => String(x),
    bar: (x: number) => parseInt(x),
    //       ^^^^^^
    // should error that this is the wrong argument type
  }
)

Это похоже на ошибку, потому что следующее приводит к ошибке, хотя и не в том месте:

const a = {foo: 1, bar: '2'}
type A = typeof a
type B = $ObjMap<A, <V>(V) => V => any>

const b: B = {
  foo: x => String(x),
  bar: (x: number) => parseInt(x),
}

Ошибка:

3: type B = $ObjMap<A, <V>(V) => V => any>
            ^ Cannot instantiate `$ObjMap` because string [1] is incompatible with number [2] in the first argument.
   References:
   1: const a = {foo: 1, bar: '2'}
                              ^ [1]
   7:   bar: (x: number) => parseInt(x),
                 ^ [2]

1 Ответ

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

Хорошо, я смог заставить его работать с

declare function test<A: Object, M: $ReadOnly<$ObjMap<A, <I, O>(I) => I => O>>>(
  obj: A,
  mapper: M
): $ObjMap<M, <I, O>((I) => O) => O>

Не идеально, потому что вывод можно назначить только для формы $ReadOnly, но он охватывает все проверки типов, которые мне нужны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...