составь <any>как мне набрать этот материал? - PullRequest
0 голосов
/ 09 марта 2020

У меня вопрос к тебе! Я перенес свое приложение Entier на typeScript, но у меня возникли некоторые трудности с функцией compose ... (не беспокойтесь об этом, я уже исправляю все, кроме compose ())

С compose(...) (без 'any') Я получаю следующее:

Никакая перегрузка не соответствует этому вызову. Перегрузка 1 из 2, '(props: Readonly): Route', выдала следующую ошибку. Тип «unknown» не может быть назначен типу «ComponentClass | FunctionComponent | ComponentClass, любой> | FunctionComponent <...> | не определено. Тип «unknown» не может быть назначен типу «FunctionComponent>». Перегрузка 2 из 2, '(props: RouteProps, context ?: any): Route', выдала следующую ошибку. Тип «unknown» не может быть назначен типу «ComponentClass | FunctionComponent | ComponentClass, любой> | FunctionComponent <...> | не определено. Тип «unknown» не может быть назначен типу «FunctionComponent>». TS2769

Вот почему я хотел бы заменить его и ввести его.

это мой код:

/ container.ts

//@ts-ignore
import { connect } from "react-redux";
import { compose, AnyAction, Dispatch } from "redux";
import { withRouter } from "react-router-dom";
import { getProfile, updateProfile } from "../../../services/clients/user";
import { updateUserInitial } from "../../../actions/initialUser";
import { IStoreState } from "../../typeScriptInclude";
import { ThunkDispatch } from "redux-thunk";
import { Profile } from "./component/utilities/includeTypeScript";
import { IEditAccountProps as Props } from './component/EditAccount';

interface IupDateWalterInitailUserPropsType {
  walterUser: {
    first_name: string;
    last_name: string;
  };
}

interface IMapStateToProps{
  isConnect: boolean;
  walterUser: any;
  upDateProfile: any;
}

interface IMapDispatchToProps{
  upDateWalterInitailUser: any;
}

const mapStateToProps = (state: IStoreState): IMapStateToProps => {
  return {
    isConnect: state.isConnect,
    walterUser: getProfile(),
    upDateProfile: (data: Profile) => updateProfile(data)
  };
};

type ApplicationDispatch = ThunkDispatch<IStoreState, void, AnyAction> &
  Dispatch;

const mapDispatchToProps = (
  dispatch: ApplicationDispatch,
): IMapDispatchToProps => ({
  upDateWalterInitailUser: (form: IupDateWalterInitailUserPropsType) =>
    dispatch(updateUserInitial(form))
});

export default compose<any>(
  withRouter,
  connect(
    mapStateToProps,
    mapDispatchToProps
  )
);

/ index.ts

import EditAccount from "./component/EditAccount";
import container from './container';

export default container(EditAccount);

Дело в том, что я много чего пытался набрать, но ничего не поделать ... Я пытался

// Which props define our new component : IProps - IInjectedProps
type ContainerProps = Omit<Props, keyof InjectedProps>;

export default compose<Props, ContainerProps>(
  withRouter,
  connect(
    mapStateToProps,
    mapDispatchToProps
  )
);

Я снимаю withRouter но я получаю следующее:

Ожидается 2 аргумента, но получено 1. TS2554

Очевидно, но почему это не работает с моим первым решением ... нужно понять

Спасибо всем с наилучшими пожеланиями.

1 Ответ

1 голос
/ 09 марта 2020

Это проблема connect, а не compose. Насколько я помню, есть несоответствие в react версиях в node_modules/@types. Папка react-redux types имеет собственный node_modules и читает из нее react types. Это версия, отличная от реальной папки react в root node_modules. Итак, получается, что тип ComponentClass читается из двух разных файлов .d.ts и не совпадает, отсюда и ошибка.

Вы можете @ts-ignore строки connect и забыть об этом. Это было не очень привлекательно для меня, так что я сделал (хотя это взломать и немного утомительно), когда я удалил node_modules из root/node_modules/@types/react-native и root/node_modules/@types/react-redux. При этом включается tslint для чтения типов из того же файла из root/node_modules/@types/react. Это решает проблему, но каждый раз, когда вы устанавливаете или удаляете пакет, эти node_modules появляются снова. Вам придется каждый раз удалять их (для этого у меня есть командный файл cmd). Надеюсь это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...