Объявите функцию стрелки как возвращение в TypeScript - PullRequest
0 голосов
/ 02 мая 2018

Я хочу написать декларацию TypeScript для ReactMeteorData.jsx , которая экспортирует:

export default function connect(options) {
  let expandedOptions = options;
  if (typeof options === 'function') {
    expandedOptions = {
      getMeteorData: options,
    };
  }

  const { getMeteorData, pure = true } = expandedOptions;

  const BaseComponent = pure ? ReactPureComponent : ReactComponent;
  return (WrappedComponent) => (
    class ReactMeteorDataComponent extends BaseComponent {
      ...
    }
  );
}

который перепаковывается как withTracker с помощью реагировать-метеор-data.jsx :

export { default as withTracker } from './ReactMeteorData.jsx';

Я могу просто объявить возвращаемое значение как функцию:

declare module 'meteor/react-meteor-data' {
  import * as React from 'react';    
  export function withTracker(func: () => {}): Function;

  ...
}

Как я могу объявить, какие аргументы и возвращает функцию, созданную без необходимости что-либо менять в исходном пакете? Поэтому я хотел бы сделать что-то вроде:

export function withTracker(func: () => {}): (React.Component) => { React.Component };

Использование кода выглядит так:

import * as React from 'react';
import { withTracker } from 'meteor/react-meteor-data';

class Header extends React.Component<any,any> {
  render() {
    return "test";
  }
}

export default withTracker(() => {
  return { user: 1 };
})(Header);

Спасибо!

1 Ответ

0 голосов
/ 02 мая 2018

Тип, который вы описываете, может быть написан так:

(c: React.Component) => React.Component

В разделе declare module:

export function withTracker(func: () => {}): (c: React.Component) => React.Component;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...