Как правильно набрать переназначенный объект (useSelectors) - PullRequest
0 голосов
/ 07 октября 2019

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

вот мой код:

// useSelector.ts
const useSelectors = < U extends {} > (
  selectors: {
    [K in keyof U]: (state: Redux) => TypedUseSelectorHook < Redux > | null
  },
): { [K in keyof U]: TypedUseSelectorHook<Redux> | null } => {
  return reduce(
    selectors,
    (acc, selector, key) => {
      return { ...acc,
        [key]: useSelector(selector)
      };
    }, {},
  );
};

// Component.tsx
const Component = () => {
  const {
    loading,
    hierarchy,
    error
  } = useSelectors({
    loading: selectHierarchyLoading,
    hierarchy: selectHierarchyData,
    error: selectHierarchyError,
  })

  return ...;
}

IDE знает, как типы, так как мне кричит, что я не могу назначить эти типы в TypedUseSelectorHook, но я не знаю, как передать их, любая идея? :)

1 Ответ

0 голосов
/ 07 октября 2019

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

const useSelectors = < SelectorMap extends {} > (
  selectors: {
    [Selector in keyof SelectorMap]: (state: Redux) => SelectorMap[Selector]
  },
): {
  [Selector in keyof SelectorMap]: SelectorMap[Selector]
} => {
  return reduce(
    selectors,
    (acc, selector, key) => {
      return { ...acc,
        [key]: useSelector(selector)
      };
    }, {}
    as {
      [Selector in keyof SelectorMap]: SelectorMap[Selector]
    },
  );
};
...