Definitelytyped: response-router: `withRouter` не работает с` ComponentType`, начиная с версии 3.6.2

Созданный на 10 сент. 2019  ·  10Комментарии  ·  Источник: DefinitelyTyped/DefinitelyTyped

Это работало в 3.5.2, но не работает в 3.6.2.

strict режим отключен.

Это ошибка типизации или TypeScript?

Я добавил сюда неудачные тесты: https://github.com/DefinitiTyped/DefinitiTyped/commit/f036856dfc9a7fd140f378402c102206738ec0a4.

import * as React from 'react';

// Copied from https://github.com/DefinitelyTyped/DefinitelyTyped/blob/5db94ca7fd3570dc23588b404d7bb669a7886a8a/types/react-router/index.d.ts#L146
declare function withRouter<P, C extends React.ComponentType<P>>(
    component: C & React.ComponentType<P>,
): unknown;

declare const Component: React.ComponentType<{}>;
/*
Argument of type 'ComponentType<{}>' is not assignable to parameter of type 'ComponentClass<{}, any> | (ComponentClass<{}, any> & FunctionComponent<{}>)'.
  Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any> | (ComponentClass<{}, any> & FunctionComponent<{}>)'.
    Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any> & FunctionComponent<{}>'.
      Type 'FunctionComponent<{}>' is not assignable to type 'ComponentClass<{}, any>'.
        Type 'FunctionComponent<{}>' provides no match for the signature 'new (props: {}, context?: any): Component<{}, any, any>'.
*/
withRouter(Component);

Если вы знаете, как решить проблему, сделайте запрос на перенос.

  • [x] Я пробовал использовать пакет @types/xxxx , и у меня возникли проблемы.
  • [x] Я пробовал использовать последнюю стабильную версию tsc. https://www.npmjs.com/package/typescript
  • [x] У меня вопрос, который не подходит для StackOverflow . (Пожалуйста, задавайте там любые соответствующие вопросы).
  • [x] [Упоминание] (https://github.com/blog/821-mention-somebody-they-re-notified) авторов (см. Definitions by: в index.d.ts ), чтобы они могли реагировать.

    • Авторы: @ sergey-buturlakin @ mrk21 @ vasek17 @ngbrown @awendland @KostyaEsmukov @johnnyreilly @LKay @DovydasNavickas @ huy- nguyen @grmiade @DaIgeb @egorshulga @ run @ aegorshulga @rraina- pret-ru

Если вы не укажете авторов, то вопрос будет проигнорирован.

Самый полезный комментарий

Я все еще вижу проблемы даже после этого исправления. Сообщение об ошибке выглядит примерно так

 Argument of type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to parameter of type 'ComponentType<RouteComponentProps<{}, StaticContext, any>>'.
  Type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to type 'FunctionComponent<RouteComponentProps<{}, StaticContext, any>>'.
    Types of parameters '__0' and 'props' are incompatible.
      Type 'PropsWithChildren<RouteComponentProps<{}, StaticContext, any>>' is not assignable to type 'RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }'.
        Property 'myProp' is missing in type 'RouteComponentProps<{}, StaticContext, any> & { children?: ReactNode; }' but required in type '{ myProp: boolean; }'.

с компонентом, определенным как

import { RouteComponentProps, withRouter } from "react-router-dom";

interface Props extends RouteComponentProps {
  myProp: boolean;
}

const Component = ({ myProp, match }: Props) => null

export default withRouter(Component);

я использую

typescript: 3.6.3
@types/react-router: 5.0.4

Все 10 Комментарий

У меня не будет времени вникать в это. Я думаю, нам следует просто удалить любое использование ComponentType и использовать простые функции с явными реквизитами в отношении ref и children . ComponentType всегда было немного проблематично из-за объединения. Если он не создавал ошибок, он создавал очень большие связи с другими узлами. Пользователи библиотеки в любом случае не должны касаться статики, поэтому их потеря не должна быть проблемой.

Получил ту же проблему. Уже сообщалось о репозитории реактивного маршрутизатора (https://github.com/ReactTraining/react-router/issues/6906), но было перенаправлено сюда.

Я все еще вижу проблемы даже после этого исправления. Сообщение об ошибке выглядит примерно так

 Argument of type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to parameter of type 'ComponentType<RouteComponentProps<{}, StaticContext, any>>'.
  Type '({ myProp, history }: RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }) => Element' is not assignable to type 'FunctionComponent<RouteComponentProps<{}, StaticContext, any>>'.
    Types of parameters '__0' and 'props' are incompatible.
      Type 'PropsWithChildren<RouteComponentProps<{}, StaticContext, any>>' is not assignable to type 'RouteComponentProps<{}, StaticContext, any> & { myProp: boolean; }'.
        Property 'myProp' is missing in type 'RouteComponentProps<{}, StaticContext, any> & { children?: ReactNode; }' but required in type '{ myProp: boolean; }'.

с компонентом, определенным как

import { RouteComponentProps, withRouter } from "react-router-dom";

interface Props extends RouteComponentProps {
  myProp: boolean;
}

const Component = ({ myProp, match }: Props) => null

export default withRouter(Component);

я использую

typescript: 3.6.3
@types/react-router: 5.0.4

@ karol-majewski Я использую TS 3.6.3, и последняя версия @types/react-router: 5.0.4 ломается, а возврат к прежней версии - в порядке.

export function withRouter<P extends RouteComponentProps<any>, C extends React.ComponentType<P>>(
  component: C & React.ComponentType<P>,
): React.ComponentClass<Omit<P, keyof RouteComponentProps<any>> & WithRouterProps<C>> & WithRouterStatics<C>;

Я призываю всех открывать новые вопросы. Если мы исправим вашу конкретную проблему, вы не сможете получать уведомления, если вы комментируете только в закрытой цепочке. Игровая площадка машинописного текста теперь позволяет настраивать ts версия + конфигурация и может загружать определения типов. Включение ссылки в новый выпуск очень помогает разработчикам. Спасибо: молитесь:

Похоже, это бросает только с strictFunctionTypes и у меня есть решение. Посмотрим, получится ли.

@sandersn Можем ли мы снова открыть это, поскольку исправление было отменено ?

IIRC, @ eps1lon обнаружил, что это связано с ошибкой TypeScript: https://github.com/microsoft/TypeScript/issues/33490

Придет исправление: https://github.com/microsoft/TypeScript/pull/34607.

Прекрасно работает с ночной версией. Ссылка на игровую площадку

Машинопись - пустая трата времени, я потратил часы, пытаясь решить эту глупую ошибку и ничего подобного, поэтому, если машинописный текст сделан, чтобы облегчить жизнь, он определенно не выполняет свою работу, полон ошибок и ошибок

Эта проблема была исправлена ​​в TS 3.7. Закрытие.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

Loghorn picture Loghorn  ·  3Комментарии

lilling picture lilling  ·  3Комментарии

demisx picture demisx  ·  3Комментарии

JWT
svipas picture svipas  ·  3Комментарии

jbreckmckye picture jbreckmckye  ·  3Комментарии