Typescript реагирует на типы реквизита

Я использую библиотеку реагировать-google-maps для API карт Google. Согласно документации, вот как я использую карты:

const GoogleMapComponent: React.ComponentClass<{}> = compose(
  withProps({
    googleMapURL: "url",
    loadingElement: <div style={{ height: `100%` }} />,
    containerElement: <div style={{ height: `400px` }} />,
    mapElement: <div style={{ height: `100%` }} />,
  }),
  withScriptjs,
  withGoogleMap
)((props) => {
  const {data} = props;
  return(
      <GoogleMap
        defaultZoom={9}
        defaultCenter={{ lat: -34.397, lng: 150.643 }}
      >
        <HeatmapLayer />
      </GoogleMap>
    )
  }
);

Проблема здесь заключается в том, что когда я использую этот компонент, мне нужно передать проп "data", если console.log (props) я могу видеть, что мой data пропущен нормально, но так как я использую машинопись, то машинопись сейчас не об этом проп, это дает мне ошибку, как это:

Property 'data' does not exist on type 'IntrinsicAttributes & IntrinsicClassAttributes<Component<{}, ComponentState, any>> & Readonly<{

По сути, я создаю интерфейс для этого и объявляю свою базу данных, а также создаю реагирующий компонент следующим образом:

const GoogleMapComponent: React.ComponentClass<IProps> 

Тогда я смогу получить доступ к необходимым реквизитам. Проблема здесь, если я пытаюсь передать интерфейс IProps, я получаю это:

Type '{ children?: ReactNode; }' has no property 'data' and no string index signature.

Я считаю, что это из-за метода сочинения.

Я думаю, здесь вопрос заключается в том, чтобы отреагировать на библиотеку google-maps и ее использование с Typescript, так как я считаю, что она должна работать в любом другом случае. Но может быть и нет, может быть, есть хитрость в объявлении моего компонента другим способом.

1 ответ

Работает ли это, если вы набираете реквизиты в функциональном компоненте, который вы передаете для создания, например:

const GoogleMapComponent = compose(
  withProps({
    googleMapURL: "url",
    loadingElement: <div style={{ height: `100%` }} />,
    containerElement: <div style={{ height: `400px` }} />,
    mapElement: <div style={{ height: `100%` }} />,
  }),
  withScriptjs,
  withGoogleMap
)((props: IProps) => {
  const {data} = props;
  return(
    <GoogleMap
      defaultZoom={9}
      defaultCenter={{ lat: -34.397, lng: 150.643 }}
    >
      <HeatmapLayer />
    </GoogleMap>
  );
});
Другие вопросы по тегам