как конвертировать возвращаемый тип в void, используя типы Redux? - PullRequest
1 голос
/ 26 мая 2019

Я хотел бы получить типы для реквизита и компонент реагирования на основе типов действий.Поскольку типы действий всегда возвращают объект действия и отправленные реквизиты не будут иметь возвращаемого типа, как мы можем получить правильный тип для отправленных реквизитов, как в ожидаемом типе?

export type Action =
  ({ type: 'PING', arg: number })

const ping = (arg: number): Action => ({
  type: 'PING', arg
})

interface Props {
  ping: typeof ping;
}

const PingTestComponent: React.SFC<Props> = ({ping}) => {
  return (
    <Button onPress={() => ping(123)} title="ping"/>
  );
};

export const PingTest = connect(
  null,
  ({ ping: ping })
)(PingTestComponent);

Я ожидал, что отправленные реквизиты разрешенытипы:

Ожидаемый

 interface Props {
   ping: (arg: number) => void
}

1 Ответ

0 голосов
/ 26 мая 2019

На самом деле реквизиты, связанные с создателями действий, будут иметь тот же тип возврата, а не void.

В любом случае, вот как вы можете изменить тип возврата функции:

declare function foo(bar: string, baz: boolean): { type: 'A' };

type WithReturnVoid<T extends (...arg) => any> = (...args: Parameters<T>) => void;

type VoidFoo = WithReturnVoid<typeof foo>; // (bar: string, baz: boolean) => void

Playground

Parameters - встроенная утилита, которая позволяетчтобы получить тип аргументов функции.

Итак, в вашем примере это будет:

interface Props {
  ping: WithReturnVoid<typeof ping>;
}
...