Выводы универсального типа Typescript `any` для функции после изменения формы объекта - PullRequest
1 голос
/ 09 июля 2019

Возможно ли в машинописи выводить параметры функции после изменения формы функционального объекта? Идея заключается в том, чтобы динамически генерировать типы создателей избыточных действий из параметров функции. Обычно это работает, пока вам не нужно использовать универсальные типы. В приведенном ниже примере я хочу сгенерировать полезную нагрузку действия

export function createActionFactory<
  R extends string,
  T extends any[],
  P extends object
>(type: R, payloadCreator: (...args: T) => P) {
  const actionCreator = (...args: T) => {
    const payload = payloadCreator(...args);

    return { type, payload };
  };

  // comment to get proper type inference
  actionCreator.toString = () => type;

  return actionCreator;
}

// Let's assume react component
type ComponentType<P = {}> = { props: P };
const ModalComponent: ComponentType<{ foo: string, closeModal?: () => void }> = { props: { foo: "bar" } };

const show = createActionFactory(
  "SHOW",
  <T extends { closeModal?: () => void }>(
    component: ComponentType<T>,
    props: Omit<T, "closeModal">
  ) => ({ component, props })
);

// should fail as `quz` is not in the props
show(ModalComponent, { quz: "bar" });

Машинопись детская площадка ссылка .

...